İOS7'den önce, hücrenin süpervizyonu, UITableView
onu içeren şeydi . İOS7 GM itibariyle hücrenin Superview bir olduğunu (yani muhtemelen de kamu sürümde olacaktır) UITableViewWrapperView
onun Superview olmak UITableView
. Sorunun iki çözümü var.
1.Çözüm: Bir UITableViewCell
kategori 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 UITableView
referans 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:cellForRowAtIndexPath
cep sınıf olarak kullanılmak SOUITableViewCell veya emin özel hücre sınıfı gelen subclassed edilir SOUITableViewCell
ve 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
.