Antes de iOS7, la supervista de la celda era la UITableView
que 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 UITableViewWrapperView
con su supervista como laUITableView
. Hay dos soluciones al problema.
Solución n. ° 1: cree una UITableViewCell
categorí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 UITableView
referencia 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:cellForRowAtIndexPath
uso SOUITableViewCell como su clase de celda o asegúrese de que su clase de celda personalizada sea subclasificada SOUITableViewCell
y 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
.