我有一个UITableViewController,它的表视图有静态单元格,在故事板中定义。
我的表视图有两个部分。第一节有两个单元格,第二节有三个单元格。第二部分的标题中也有文本。
我想做的是,当用户点击第一节中的第一个或第二个单元格时,更新第二节的标题文本。使用动态内容动态地执行此操作(例如,从点击单元格的那一刻起,日期和时间就显示在那里)。
我试过很多次,但是viewForHeaderSection只调用一次。
我在

tableView.registerClass(TableSectionHeader.self, forHeaderFooterViewReuseIdentifier: "secondSectionCell")

其中TableSectionHeader只是:
class TableSectionHeader: UITableViewHeaderFooterView { }

然后我可以动态设置节头,如下所示:
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        if section == 1 {
            if let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("secondSectionCell") {
                cell.textLabel?.text = "hello world"
                return cell
            }

        }

        return nil
    }

我还实现了以下重写,因为有些人建议在实现viewForHeaderInSection时,还需要这样做:
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 40.0
}

即便如此。viewForHeaderInSection只调用一次。
我能像上面描述的那样动态地刷新节头文本吗?

最佳答案

实际上,您可以使用传统的表视图方式轻松地实现这一点。
即使它是静态UITableView,在数据源视图控制器中,您仍然可以实现- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
那么你如何快速更新标题呢?为这个视图控制器创建一个属性,比如NSString *titleForSecondSection。每当用户点击第一部分中的单元格时,只需在回调中更新此属性- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
最后一步是在修改[self.tableView reload]属性后调用titleForSecondSection。或者如果不想重新加载整个表视图,只需调用- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
为了清楚起见,在- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section中,对于不需要更改标题的节,只需返回一个静态字符串。对于需要更改标题的节,返回您创建的动态属性。

关于ios - 动态更改静态单元格上的节标题文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42127531/

10-17 01:09