Antes de iOS7, la supervista de la celda era la UITableViewque la contenía. A partir de iOS7 GM (es de suponer que también estará en el lanzamiento público), la supervista de la celda es una UITableViewWrapperViewcon su supervista como laUITableView . Hay dos soluciones al problema.
Solución n. ° 1: cree una UITableViewCellcategoría
@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 es un buen reemplazo para el uso cell.superview, facilita la refactorización de su código existente: simplemente busque y reemplace [cell relatedTable]y agregue una afirmación para asegurarse de que si la jerarquía de la vista cambia o se revierte en el futuro, se mostrará de inmediato. en tus pruebas.
Solución # 2: agregue una UITableViewreferencia débil aUITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
Este es un diseño mucho mejor, aunque requerirá un poco más de refactorización de código para usarlo en proyectos existentes. En su tableView:cellForRowAtIndexPathuso SOUITableViewCell como su clase de celda o asegúrese de que su clase de celda personalizada sea subclasificada SOUITableViewCelly asigne el tableView a la propiedad tableView de la celda. Dentro de la celda, puede consultar la vista de tabla que contiene usando self.tableView.