如何覆盖 tableView:titleForHeaderInSection: 以调整静态 UITableViews 的节标题?

Posted

技术标签:

【中文标题】如何覆盖 tableView:titleForHeaderInSection: 以调整静态 UITableViews 的节标题?【英文标题】:How to override tableView:titleForHeaderInSection: to adjust section headers of static UITableViews? 【发布时间】:2012-05-21 19:10:59 【问题描述】:

我正在玩故事板,我为一个控制器设置了一个UITableView,它由两个部分组成。在这两个部分中,我都添加了几个 static 单元格。 但是,根据代码路径,我想为我的两个部分显示不同的 headers。 由于没有来源,也没有委托,我应该如何覆盖tableView:titleForHeaderInSection:

【问题讨论】:

为什么这个标签是 monotouch?该问题并不表明您正在使用它。 我是,但我也使用ObjectiveC。因此,任何一种语言的解决方案都可以,并帮助我将其翻译成另一种语言。 【参考方案1】:

使用静态表视图,您仍然可以(并且必须)将数据源连接到 UITableViewController。关键是,如果您实现数据源方法,那么这将覆盖您在表格视图中设置的静态内容。您可以毫无问题地覆盖 titleForHeader,因为这是您想要做的。

-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

    if (section == 0)
        return @"HELLO!";
    else 
        return [super tableView:tableView titleForHeaderInSection:section];
    

将静态表中第 0 节的标题设置为 HELLO!,覆盖在 xib 中设置的标题。其他的则保留在 xib 中。

关键点是静态表的填充方式与动态表完全相同,只是 UITableViewController 实现了自己版本的所有数据源方法。这些方法可能会从 xib 文件中读取信息并将适当的信息发送回表视图。如果您想要静态内容,请不要实现或调用 super。如果您想要自己的内容,请使用与上述类似的代码。

【讨论】:

如何为标题标题创建出口? 你不能,这是我的猜测,因为我离开了 mac。不过,我现在已经在我的答案中测试了该方法,并且效果很好。 太好了,谢谢!现在我必须想办法把它移植到 MonoTouch。在您的解决方案中,您是否将控制器作为源,然后仅覆盖这一方法?还是您创建了单独源的实例? 视图控制器是数据源。【参考方案2】:

我对你的问题有点困惑,也许我需要更多信息。你是说在情节提要中有一个视图控制器并将一个表格视图对象拖到该视图控制器上吗?

如果是这样的话,那么这个视图控制器仍然可以成为那个表视图的数据源和委托

在您的 .h 文件中: @interface VIEWCONTROLLERNAME: UIViewController

在您的 .m 文件中,您需要为每个方法声明所需的方法: cellForRowAtIndexPath 和 numberOfRowsInSection(请参阅文档以获取必需和可选消息)以避免“不完整的实现错误”。这也是您可以覆盖 titleForHeaderInSection 的地方。

然后返回故事板,您可以右键单击表格视图并将数据源和委托选项拖到您的视图控制器(或在 Connections Inspector 选项卡中执行此操作)

如果这不是您所做的,请提供更多信息。

【讨论】:

提问者在表格视图中使用静态内容。有了这个,你不必实现数据源方法。 完全同意。但我会假设他使用的是静态数据,因为他不知道他可以实现数据源协议。 不,我使用的是静态内容,因为内容是静态的! :-) 这就是新静态单元的全部优势。但是我想知道是否有办法对静态产生影响。

以上是关于如何覆盖 tableView:titleForHeaderInSection: 以调整静态 UITableViews 的节标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何:获取代码覆盖率数据

你好,LABVIEW复制文件,如何做到不覆盖?

如何自动给文件命名,避免覆盖同名文件?

安卓软件升级软件如何覆盖旧版

如何在代码覆盖率报告 Laravel 8 中覆盖异常?

如何配置 SonarQube 让我们增加覆盖范围?