[iphone] iOS UITableView HeaderView 추가하기 (섹션 헤더 아님)

연락처 앱과 같이 테이블 헤더 (섹션 헤더가 아닌)를 추가하고 싶습니다.
여기에 이미지 설명을 입력하십시오

정확히 위와 같습니다-표 위의 이미지 옆에있는 레이블.

모든보기를 스크롤 할 수 있기를 원하므로 테이블 외부에 배치 할 수 없습니다.

어떻게해야합니까?



답변

UITableViewtableHeaderView속성을. 원하는 뷰로 설정하십시오.

new UIView를 컨테이너로 사용하고 텍스트 레이블과 이미지 뷰를 new UIView에 추가 한 다음 tableHeaderView새 뷰로 설정 하십시오.

예를 들어 UITableViewController:

-(void)viewDidLoad
{
     // ...
     UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:imageView];
     UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:labelView];
     self.tableView.tableHeaderView = headerView;
     [imageView release];
     [labelView release];
     [headerView release];
     // ...
} 


답변

Interface Builder에서 쉽게 할 수 있습니다. 테이블이있는 뷰를 만들고 다른 뷰를 테이블에 놓기 만하면됩니다. 테이블 헤더 뷰가됩니다. 해당보기에 레이블과 이미지를 추가하십시오. 뷰 계층에 대해서는 아래 그림을 참조하십시오.
Interface Builder에서 계층보기


답변

에서 스위프트 :

override func viewDidLoad() {
    super.viewDidLoad()

    // We set the table view header.
    let cellTableViewHeader = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewHeaderCustomCellIdentifier) as! UITableViewCell
    cellTableViewHeader.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewHeaderCustomCellIdentifier]!)
    self.tableView.tableHeaderView = cellTableViewHeader

    // We set the table view footer, just know that it will also remove extra cells from tableview.
    let cellTableViewFooter = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewFooterCustomCellIdentifier) as! UITableViewCell
    cellTableViewFooter.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewFooterCustomCellIdentifier]!)
    self.tableView.tableFooterView = cellTableViewFooter
}


답변

또한 인터페이스 빌더에서 UIView 만 작성하고 ImageView 및 UILabel을 끌어서 놓아 원하는 헤더처럼 보이게 한 다음 사용할 수 있습니다.

UIView가 원하는 방식으로 표시되면 XIB에서 프로그래밍 방식으로 초기화하여 UITableView에 추가 할 수 있습니다. 즉, IB에서 ENTIRE 테이블을 디자인 할 필요가 없습니다. headerView 만 (이 방법으로 헤더 뷰를 다른 테이블에서도 재사용 할 수 있음)

예를 들어 테이블 헤더 중 하나에 대한 사용자 정의 UIView가 있습니다. 뷰는 “CustomHeaderView”라는 xib 파일로 관리되며 UITableViewController 서브 클래스에서 다음 코드를 사용하여 테이블 헤더에로드됩니다.

-(UIView *) customHeaderView {
    if (!customHeaderView) {
        [[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView" owner:self options:nil];
    }

    return customHeaderView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set the CustomerHeaderView as the tables header view 
    self.tableView.tableHeaderView = self.customHeaderView;
}


답변

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)];
    headerView.backgroundColor=[[UIColor redColor]colorWithAlphaComponent:0.5f];
    headerView.layer.borderColor=[UIColor blackColor].CGColor;
    headerView.layer.borderWidth=1.0f;

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5,100,20)];

    headerLabel.textAlignment = NSTextAlignmentRight;
    headerLabel.text = @"LeadCode ";
    //headerLabel.textColor=[UIColor whiteColor];
    headerLabel.backgroundColor = [UIColor clearColor];


    [headerView addSubview:headerLabel];

    UILabel *headerLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)];

    headerLabel1.textAlignment = NSTextAlignmentRight;
    headerLabel1.text = @"LeadName";
    headerLabel.textColor=[UIColor whiteColor];
    headerLabel1.backgroundColor = [UIColor clearColor];

    [headerView addSubview:headerLabel1];

    return headerView;

}


답변