- 在该UITableViewCell所属的UITableViewDelegate代理类中重写以下方法:
- (BOOL)tableView:(UITableView *)tableView canFocusRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- 在该UITableViewCell的初始化方法中为其设置父视图:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.contentView.superview.focusEnvironment = self.contentView;
}
return self;
}
- 如果以上两种方法都没有解决问题,可以考虑在UITableViewDelegate代理类中的以下方法中提供父焦点环境:
- (void)tableView:(UITableView *)tableView didUpdateFocusInContext:(UITableViewFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator {
if (context.nextFocusedView == nil) {
return;
}
if ([context.nextFocusedView isKindOfClass:[UITableViewCell class]]) {
UITableViewCell *cell = (UITableViewCell *)context.nextFocusedView;
context.nextFocusedView.superview.focusEnvironment = cell;
}
}
上述代码示例可以解决UITableViewCell未提供父级焦点环境导致AppleTV应用程序崩溃的问题。