我有一个带有自定义标题 View 的表,无论何时或为节选择什么值,我总是得到nil值。我有另一个表,同样的问题。

如果我打印[tableview subviews]的值,我可以看到标题 View ,但是我不知道为什么该方法不会返回任何内容。

我正在尝试做的是获取headerview中的activityIndi​​cator并通过方法调用启动或停止它。

header 始终显示为正常,但我无法对其进行引用。另外,调用headerViewForSection:不会调用委托(delegate)方法,这正常吗?
footerViewForSection:有同样的问题

一些代码:

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

    NSArray* objs = [[NSBundle mainBundle] loadNibNamed:@"iPadTableCells" owner:nil options:nil];
    UIView* header = [objs objectAtIndex: 0];

    UIActivityIndicatorView* activityIndicator = (UIActivityIndicatorView*) [header viewWithTag:5];
    [activityIndicator startAnimating]

    return header;

}

从任何方法:
    UIView* headerView = [tableview headerViewForSection: section];  //returns nil

    if (headerView) {
        UIActivityIndicatorView* activityIndicator = (UIActivityIndicatorView*)[headerView viewWithTag: 5];
        [activityIndicator stopAnimating];
    }

最佳答案

回答
从文档中:

(Swift等效于register(_:forHeaderFooterViewReuseIdentifier:)。)
因此,您需要注册 Nib ,然后使用重用标识符获取它,而不是直接将其从应用程序包中拉出来,这就是您现在正在做的事情。
...如果您想使用headerViewForSection方法。
替代答案
另外,您可以检查是否继续在viewForHeaderInSection方法内旋转,然后仅发送调用:

[self.tableView beginUpdates];
[self.tableView endUpdates];
刷新节标题。
(请注意,这种替代方法将破坏并重新创建整个 View ,因此,如果您有一个包含大量数据的大表,则效率可能不高。)

10-08 06:27