更改UITableView的节头/页脚标题而不重新加载整个表视图

Ali*_*Ali 29 header footer reload uitableview ios

有没有办法重新加载表视图的节头/页脚而不调用 [tableView reloadData];?

实际上,我想在其章节页脚的表格视图的部分中显示单元格的数量.表视图是可编辑的,我使用删除或插入行

– insertRowsAtIndexPaths:withRowAnimation:
– deleteRowsAtIndexPaths:withRowAnimation:
Run Code Online (Sandbox Code Playgroud)

似乎这些方法不会更新部分页脚.奇怪的是,当我调用这些方法时,表视图数据源方法

- (NSString *)tableView:(UITableView *)table titleForFooterInSection:(NSInteger)section 
Run Code Online (Sandbox Code Playgroud)

被调用(两次!),但它没有使用新值更新表视图!

任何人都知道如何解决这个问题?

Nic*_*kel 35

如果您只有基本文本页眉或页脚,则可以直接访问它们:

[tableView footerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForFooterInSection:indexPath.section];
Run Code Online (Sandbox Code Playgroud)

类似的标题:

[tableView headerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForHeaderInSection:indexPath.section];
Run Code Online (Sandbox Code Playgroud)

  • 但是直接访问`textLabel`不会改变框架以适应新文本.我是否必须在页脚/标题视图上调用`sizeToFit`? (3认同)

Cra*_*ler 19

这应该工作:

    UIView.setAnimationsEnabled(false)
    tableView.beginUpdates()

    if let containerView = tableView.footerViewForSection(0) {
        containerView.textLabel!.text = "New footer text!"

        containerView.sizeToFit()
    }

    tableView.endUpdates()
    UIView.setAnimationsEnabled(true)
Run Code Online (Sandbox Code Playgroud)


Ali*_*Ali 7

我设法以间接的方式做到了:我创建了一个UILabel并将其设置为节头/页脚.

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    // update sectionFooterView.text    
    return sectionFooterView;
}

- (void)viewDidLoad {
    // create sectionFooterView in Interface Builder, change the frame here
    // use Font-size:15 , BG-Color: clearColor , text-Color: RGB=(97,105,118) 
    // and Text-alignment:Center to look like table view's original footer
    sectionFooterView.frame = CGRectMake(0, 10, 320, 12);
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在不设置自定义页脚视图的情况下执行此操作?


Dan*_*son 6

这就是你在 Swift 3.0 中的做法

tableView.beginUpdates()
tableView.headerView(forSection: indexPath.section)?.textLabel?.text = "Some text"
tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)