我有一个带有自定义标题 View 的表,无论何时或为节选择什么值,我总是得到nil值。我有另一个表,同样的问题。
如果我打印[tableview subviews]的值,我可以看到标题 View ,但是我不知道为什么该方法不会返回任何内容。
我正在尝试做的是获取headerview中的activityIndicator并通过方法调用启动或停止它。
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 ,因此,如果您有一个包含大量数据的大表,则效率可能不高。)