До 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
.