UITableView - 直接设置 tableHeaderView 属性与实现 -viewForHeaderInSection 方法

Posted

技术标签:

【中文标题】UITableView - 直接设置 tableHeaderView 属性与实现 -viewForHeaderInSection 方法【英文标题】:UITableView - Directly setting tableHeaderView property vs. Implementing -viewForHeaderInSection method 【发布时间】:2011-06-22 21:50:04 【问题描述】:

直接设置tableHeaderView/tableFooterView属性有什么区别:

UIView *headerView =  [[UIView alloc] init...];
tableView.tableHeaderView = headerView;
[headerView release];

并实现 viewForHeaderInSection/viewForFooterInSection 方法?:

- (UIView *)tableView:(UITableView *)tableView 
    viewForHeaderInSection:(NSInteger)section
   
    UIView *headerView = [[[HeaderView alloc] init...] autorelease];
    return headerView;

【问题讨论】:

【参考方案1】:

第一个是表格的标题,第二个可以让您有机会为表格的每个部分添加标题。

绿色是tableViewHeader,蓝色是sectionHeaders。

-(void) viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    if (headerView == nil) 
        [[NSBundle mainBundle] loadNibNamed:@"DetailContactHeader" owner:self options:nil];
        headerView.nameLabel.text = [NSString stringWithFormat:@"%@ %@", 
                                                   [contact objectForKey:@"name"],
                                                   [contact objectForKey:@"familyname"]];
        if ([[contact allKeys] containsObject:@"pictureurl"]) 
            headerView.avatarView.image = [UIImage imageNamed:[contact objectForKey:@"pictureurl"]];
        
    
    [self.tableView setTableHeaderView: headerView];


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return 2;


- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section 
    // Return the number of rows in the section.
    return [[contact allKeys] count]-3;



// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView       
         cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 
                                       reuseIdentifier:CellIdentifier] autorelease];
    

    id key = [self.possibleFields objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%@", key];
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", [contact objectForKey:key]];
    return cell;


-(CGFloat) tableView:(UITableView *)tableView 
  heightForHeaderInSection:(NSInteger)section

    return 44.0;


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

    UILabel *l = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
    l.backgroundColor = [UIColor clearColor];
    l.text= @"I am a Section Header";
    return l;

您将在此处找到此应用的代码:MyContacts

【讨论】:

在闲逛之后我看到你回答了我的问题,但没有回答,哈哈。再次感谢! @vikingosegundo

以上是关于UITableView - 直接设置 tableHeaderView 属性与实现 -viewForHeaderInSection 方法的主要内容,如果未能解决你的问题,请参考以下文章

为 UITableView 设置数据源和委托的最佳实践

在哪里将 UITableview 样式设置为分组样式

UITableView的contentSize

UITableView 图像上的缓慢滚动

UITableView - 我怎样才能直接从一个项目的视图移动到另一个?

#iOS问题记录#UITableView加载后直接滑动倒最底部