在UITableView中只调用一次viewForHeaderInSection

时间:2014-08-29 07:49:02

标签: ios objective-c iphone uitableview

我已经在这个问题上让谷歌筋疲力尽了,不过我确信这是一件非常简单的事情。

我正在尝试创建一个UITableView,代表25个(让我们说)对象分为25个部分,每行1行。

我创建的自定义单元格显示正常(所有25个,按正确顺序)。我希望在每个对象上方显示一个节标题视图。

问题是只显示了一个节标题视图(第一个)。

Judicious NSLogging告诉我,只有一次调用viewForHeaderInSection,尽管每个对象调用heightForHeaderInSection 2x。我从numberOfSectionsInTableView返回25,从numberOfRowsInSection返回1。

我通过执行UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, viewHeight)]然后添加UILabel和UIButton在viewForHeaderInSection中构建UIView。我不是UITableViewHeaderFooterView的子类。不确定这是否会产生影响。

有什么想法吗?

相关代码:

部分和行数:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.objects count];
}

- (NSInteger)numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

行的高度和单元格:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 390;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
                        object:(PFObject *)object
{
    static NSString *CellIdentifier = @"CustomCell";    
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // add custom content to cell

    return cell;
}

标题的高度和视图:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 60;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSLog(@"in viewForHeaderInSection %ld", (long)section); // I only see this once
    NSLog(@"return view for section %ld", section);         // this is 0 when I see it

    // gather content for header
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, viewHeight)];
    // add content to header (displays correctly)

    return headerView;
}

3 个答案:

答案 0 :(得分:5)

虽然为时已晚。经过30分钟的战斗,我在xCode 8.1中找到了解决方案。我把它放在其他可能有帮助的地方。

//添加下面的委托方法后,我发现这个被多次调用

 - (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section 
{
   return 30.0;
} 

答案 1 :(得分:0)

这不能回答这个问题,但是我正在解决这个问题,因为我正在格式化上面的内容:如果每个单元格需要一个标题,只需将标题内容构建到单元格中,而不是试图将其放入在单独的标题视图中。叹息...

仍然有兴趣知道为什么viewForHeaderInSection似乎只被调用一次。

答案 2 :(得分:0)

添加此委托方法

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