연락처 앱과 같이 테이블 헤더 (섹션 헤더가 아닌)를 추가하고 싶습니다.
정확히 위와 같습니다-표 위의 이미지 옆에있는 레이블.
모든보기를 스크롤 할 수 있기를 원하므로 테이블 외부에 배치 할 수 없습니다.
어떻게해야합니까?
답변
UITableView
이 tableHeaderView
속성을. 원하는 뷰로 설정하십시오.
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에서 쉽게 할 수 있습니다. 테이블이있는 뷰를 만들고 다른 뷰를 테이블에 놓기 만하면됩니다. 테이블 헤더 뷰가됩니다. 해당보기에 레이블과 이미지를 추가하십시오. 뷰 계층에 대해서는 아래 그림을 참조하십시오.
답변
에서 스위프트 :
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;
}