До iOS7 супервизор ячейки UITableViewсодержал ее. Что касается iOS7 GM (так что, предположительно, также будет в общедоступном выпуске) супервизор ячейки - это UITableViewWrapperViewс его супервизором UITableView. Есть два решения проблемы.
Решение №1: Создайте UITableViewCellкатегорию
@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
Это хорошая замена для использования cell.superview, упрощает рефакторинг существующего кода - просто выполните поиск и замените с помощью [cell relatedTable]и вставьте утверждение, чтобы гарантировать, что если иерархия представлений изменится или вернется в будущем, она появится немедленно. в ваших тестах.
Решение №2: Добавьте слабую UITableViewссылку наUITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
Это намного лучший дизайн, хотя для его использования в существующих проектах потребуется немного больше рефакторинга кода. При tableView:cellForRowAtIndexPathиспользовании SOUITableViewCell в качестве класса ячейки или убедитесь, что ваш пользовательский класс ячейки является подклассом, SOUITableViewCellи назначьте tableView свойству tableView ячейки. Затем внутри ячейки вы можете обратиться к содержащемуся табличному представлению, используя self.tableView.