在iOS8中无法再访问UITableViewHeaderFooterView上的textLabel?

时间:2014-06-04 17:34:33

标签: ios objective-c unrecognized-selector ios8

-(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中的错误?

1 个答案:

答案 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.");
    }
}