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