我有一个包含自定义标题视图的表,无论何时,或者我为部分选择了什么值,我总是得到零值。我有另一张表有同样问题的表。
如果我打印[tableview subviews]的值,我可以看到标题视图,但我不知道为什么该方法不会返回任何内容。
我要做的是获取headerview中的activityIndicator并启动它或通过方法调用来停止它。
标题总是画好,但我无法获得参考。另外,调用headerViewForSection:
不会调用委托方法,这是正常的吗?
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];
}
答案 0 :(得分:15)
来自文档:
要使表格视图能够识别页眉或页脚视图,您需要注册它。您可以使用
registerNib:forHeaderFooterViewReuseIdentifier:
的{{1}}或registerClass:forHeaderFooterViewReuseIdentifier:
方法执行此操作。
(Swift等价物为UITableView
。)
所以你需要注册nib,然后使用重用标识符来获取它,而不是直接将它从应用程序包中拉出来,这就是你现在正在做的事情。
...如果您想使用register(_:forHeaderFooterViewReuseIdentifier:)
方法。
或者,您可以检查是否继续在headerViewForSection
方法内旋转,然后发送只是呼叫:
viewForHeaderInSection
刷新章节标题。
(请注意,这种替代方法会破坏并重新创建整个视图,因此如果您有一个包含大量数据的大表,则可能效率不高。)
答案 1 :(得分:9)
自问这个问题以来已经有一段时间了,最近我遇到了类似的问题并且在这里提出了我自己的问题: UITableView -headerViewForSection returns (null)
我相信我有答案。
UITableViewHeaderFooterView
子类并将其命名为CustomHeaderView
iPadTableCells
)CustomHeaderView
@property (strong, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;
使用以下代码:
- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
static NSString *HeaderIdentifier = @"header";
CustomHeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderIdentifier];
if(!header) {
NSArray* objs = [[NSBundle mainBundle] loadNibNamed:@"iPadTableCells"
owner:nil
options:nil];
header = [objs objectAtIndex: 0];
}
[header.activityIndicator startAnimating];
return header;
}
然后您可以这样访问它:
CustomHeaderView *headerView = (CustomHeaderView*)[tableView headerViewForSection:section];
[headerView.activityIndicator stopAnimating];
答案 2 :(得分:4)
您只需为需要返回的标题视图创建UITableViewHeaderFooterView
的实例
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let sectionHeaderView = UITableViewHeaderFooterView()
//customize your view here
return sectionHeaderView
}