Inilah solusi lain yang sedikit berbeda.
Saya harus menggunakannya karena beberapa masalah hierarki tampilan yang saya miliki: Saya sedang membuat beberapa fungsi yang mengharuskan melewati tampilan di sekitar ke berbagai tempat dalam hierarki tampilan, yang rusak ketika menggunakan tampilan tabel UITableViewController b / c tableView adalah tampilan root UITableViewController's ( self.view) dan bukan hanya tampilan biasa, itu menciptakan hierarki controller / view yang tidak konsisten dan menyebabkan crash.
Pada dasarnya buatlah subkelas Anda sendiri dari UITableViewController dan atur loadView untuk menetapkan sendiri. Lihat tampilan yang berbeda, dan ganti properti tableView untuk mengembalikan tampilan tabel yang terpisah.
sebagai contoh:
@interface MyTableVC : UITableViewController
@end
@interface MyTableVC ()
@property (nonatomic, strong) UITableView *separateTableView;
@end
@implementation MyTableVC
- (void)loadView {
self.view = [[UIView alloc] initWithFrame:CGRectZero];
}
- (UITableView *)tableView {
return self.separateTableView;
}
- (void)setTableView:(UITableView *)tableView {
self.separateTableView = tableView;
}
@end
Ketika dikombinasikan dengan solusi Keller, ini akan lebih kuat dalam arti bahwa tableView sekarang menjadi tampilan biasa, bukan tampilan root VC, dan lebih kuat terhadap perubahan hierarki tampilan. Contoh menggunakannya dengan cara ini:
MyTableVC *tableViewController = [[MyTableVC alloc] init];
tableViewController.tableView = self.myTableView;
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(getConnections) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;
Ada kemungkinan penggunaan lain untuk ini:
Karena subklas dengan cara ini memisahkan self.view dari self.tableView, sekarang mungkin untuk menggunakan UITableViewController ini sebagai pengontrol biasa, dan menambahkan subview lain ke self.view tanpa keanehan menambahkan subview ke UITableView, jadi orang mungkin mempertimbangkan untuk membuat lihat pengontrol secara langsung subkelas UITableViewController alih-alih memiliki anak-anak UITableViewController.
Beberapa hal yang harus diperhatikan:
Karena kita mengganti properti tableView tanpa memanggil super, mungkin ada beberapa hal yang harus diperhatikan dan harus ditangani jika perlu. Sebagai contoh, mengatur tampilan tabel dalam contoh saya di atas tidak akan menambahkan tampilan tabel ke self.view dan tidak mengatur bingkai yang mungkin ingin Anda lakukan. Juga, dalam implementasi ini tidak ada tableView default yang diberikan kepada Anda ketika kelas instantiated, yang juga merupakan sesuatu yang dapat Anda pertimbangkan untuk ditambahkan. Saya tidak memasukkannya di sini karena itu adalah kasus per kasus, dan solusi ini sebenarnya cocok dengan solusi Keller.