-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
UITableViewHeaderFooterView *headerIndexText = (UITableViewHeaderFooterView *)view;
[headerIndexText.textLabel setTextColor:[UIColor whiteColor]];
}
以上代码适用于 iOS6 和 iOS7 ,并且已经投入生产一段时间了。但是,在 iPhone5S模拟器上的 iOS8 上运行时,应用程序崩溃时出现以下错误:
- [UIView textLabel]:无法识别的选择器发送到实例0xeccad20
这是一种不赞成使用此标签样式的方法,还是iOS8中的错误?
答案 0 :(得分:4)
我有同样的问题。在以前的iOS版本中,如果您有自定义标题视图,则不会使用willDisplayHeaderView:forSection:
为您的自定义视图的部分调用您的委托,并且类型转换是安全的。现在显然他们会打电话给你每个标题,甚至你的自定义标题。因此,view
参数可能是您的自定义UIControl,而不是实际的UITableViewHeaderFooterView。
要过滤掉对您的委托的新iOS8调用,请按以下步骤保护它:
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
if([view isKindOfClass:[UITableViewHeaderFooterView class]]) {
UITableViewHeaderFooterView *headerIndexText = (UITableViewHeaderFooterView *)view;
[headerIndexText.textLabel setTextColor:[UIColor whiteColor]];
} else {
NSLog(@"This is the new iOS case where the delegate gets called on a custom view.");
}
}