Antes do iOS7, a visão geral da célula era o UITableView
que o continha. A partir do iOS7 GM (provavelmente também estará no lançamento público), a supervisão da célula é uma, UITableViewWrapperView
com sua supervisão sendo o UITableView
. Existem duas soluções para o problema.
Solução nº 1: crie uma UITableViewCell
categoria
@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 UITableView
referê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:cellForRowAtIndexPath
uso SOUITableViewCell como sua classe de célula ou certifique-se de que sua classe de célula personalizada é uma subclasse de SOUITableViewCell
e 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
.