Sebelum iOS7, tampilan super sel adalah UITableViewyang berisi itu. Pada GM iOS7 (jadi mungkin akan dirilis ke publik juga) tampilan super sel adalah UITableViewWrapperViewdengan tampilan supernya menjadi UITableView. Ada dua solusi untuk masalah ini.
Solusi # 1: Buat UITableViewCellkategori
@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
Ini adalah pengganti drop-in yang baik untuk digunakan cell.superview, membuatnya mudah untuk memfaktorkan ulang kode yang ada - cukup telusuri dan ganti dengan [cell relatedTable], dan berikan pernyataan untuk memastikan bahwa jika hierarki tampilan berubah atau kembali di masa mendatang, maka akan segera muncul dalam ujianmu.
Solusi # 2: Tambahkan UITableViewreferensi Lemah keUITableViewCell
@interface SOUITableViewCell
@property (weak, nonatomic) UITableView *tableView;
@end
Ini adalah desain yang jauh lebih baik, meskipun akan membutuhkan lebih banyak pemfaktoran ulang kode untuk digunakan dalam proyek yang sudah ada. Dalam tableView:cellForRowAtIndexPathpenggunaan SOUITableViewCell sebagai kelas sel Anda atau pastikan kelas sel khusus Anda disubkelas dari SOUITableViewCelldan tetapkan tableView ke properti tableView sel. Di dalam sel, Anda kemudian dapat merujuk ke tampilan tabel yang berisi menggunakan self.tableView.