Sebelum iOS7, tampilan super sel adalah UITableView
yang berisi itu. Pada GM iOS7 (jadi mungkin akan dirilis ke publik juga) tampilan super sel adalah UITableViewWrapperView
dengan tampilan supernya menjadi UITableView
. Ada dua solusi untuk masalah ini.
Solusi # 1: Buat UITableViewCell
kategori
@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 UITableView
referensi 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:cellForRowAtIndexPath
penggunaan SOUITableViewCell sebagai kelas sel Anda atau pastikan kelas sel khusus Anda disubkelas dari SOUITableViewCell
dan tetapkan tableView ke properti tableView sel. Di dalam sel, Anda kemudian dapat merujuk ke tampilan tabel yang berisi menggunakan self.tableView
.