Antes do iOS7, a visão geral da célula era o UITableViewque o continha. A partir do iOS7 GM (provavelmente também estará no lançamento público), a supervisão da célula é uma, UITableViewWrapperViewcom sua supervisão sendo o UITableView. Existem duas soluções para o problema.
Solução nº 1: crie uma UITableViewCellcategoria
@implementation UITableViewCell (RelatedTable)
- (UITableView *)relatedTable
{
if ([self.superview isKindOfClass:[UITableView class]])
return (UITableView *)self.superview;
else if ([self.superview.superview isKindOfClass:[UITableView class]])
return (UITableView *)self.superview.superview;
else
{
NSAssert(NO, @"UITableView shall always be found.");
return nil;
}
}
@end
Este é um bom substituto imediato para usar cell.superview, torna mais fácil refatorar seu código existente - apenas pesquise e substitua [cell relatedTable], e coloque uma declaração para garantir que, se a hierarquia de visualização mudar ou reverter no futuro, ela aparecerá imediatamente em seus testes.
Solução # 2: Adicionar uma UITableViewreferência fraca aUITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
Este é um design muito melhor, embora exija um pouco mais de refatoração de código para usar em projetos existentes. Em seu tableView:cellForRowAtIndexPathuso SOUITableViewCell como sua classe de célula ou certifique-se de que sua classe de célula personalizada é uma subclasse de SOUITableViewCelle atribua tableView à propriedade tableView da célula. Dentro da célula, você pode então referir-se ao tableview que o contém usando self.tableView.