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