İOS7'den önce, hücrenin süpervizyonu, UITableViewonu içeren şeydi . İOS7 GM itibariyle hücrenin Superview bir olduğunu (yani muhtemelen de kamu sürümde olacaktır) UITableViewWrapperViewonun Superview olmak UITableView. Sorunun iki çözümü var.
1.Çözüm: Bir UITableViewCellkategori oluşturun
@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
Bu, kullanmak için iyi bir alternatiftir cell.superview, mevcut kodunuzu yeniden düzenlemeyi kolaylaştırır - sadece arayın ve değiştirin[cell relatedTable] ve gelecekte görünüm hiyerarşisi değişirse veya geri dönerse hemen görünmesini sağlamak için bir iddiada bulunun testlerinde.
2.Çözüm: Zayıf bir UITableViewreferans ekleyinUITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
Bu çok daha iyi bir tasarım, ancak mevcut projelerde kullanmak için biraz daha fazla kod yeniden düzenleme gerektirecek. Senin içinde tableView:cellForRowAtIndexPathcep sınıf olarak kullanılmak SOUITableViewCell veya emin özel hücre sınıfı gelen subclassed edilir SOUITableViewCellve hücrenin tableView özelliğine tableView atayın. Hücrenin içinde daha sonra kullanarak içeren tablo görünümüne başvurabilirsiniz self.tableView.