Ось ще одне рішення, яке трохи відрізняється.
Мені довелося використовувати його через деякі проблеми з ієрархією перегляду: я створив певну функціональність, яка вимагала перегляду представлень навколо різних місць в ієрархії представлення даних, які порушуються при використанні набору таблиць UITableViewController b / c, а tableView - кореневий вигляд UITableViewController ( self.view), а не просто звичайний перегляд, він створив непослідовну ієрархію контролера / перегляду та спричинив збій.
В основному створіть свій власний підклас UITableViewController та замініть loadView, щоб призначити self.view інший вигляд, і замініть властивість tableView, щоб повернути окремий перегляд таблиці.
наприклад:
@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
У поєднанні з рішенням Келлера це стане більш надійним у тому сенсі, що tableView тепер є звичайним виглядом, а не кореневим видом VC, і буде більш надійним щодо зміни ієрархій перегляду. Приклад використання цього способу:
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;
Для цього є ще одне можливе використання:
Оскільки підкласифікація таким чином відокремлює self.view від self.tableView, тепер можна використовувати цей UITableViewController як більше звичайного контролера та додавати інші підпогляди до self.view без дивацтв додавання підвідданих до UITableView, тож можна розглянути можливість їх створення переглядати контролери безпосередньо підкласу UITableViewController замість того, щоб мати дітей UITableViewController.
Деякі речі, на які слід звернути увагу:
Оскільки ми переосмислюємо властивість tableView без виклику супер, можливо, слід спостерігати за деякими речами, які слід обробляти, де це необхідно. Наприклад, встановлення перегляду таблиці в моєму вище прикладі не додасть перегляду таблиці в self.view і не встановить кадр, який ви можете зробити. Крім того, у цій реалізації відсутня таблиця за замовчуванням, надана вам, коли клас інстанціюється, що також ви можете розглянути, як додати. Я не включаю його сюди, тому що це є конкретним випадком, і це рішення насправді добре відповідає рішенням Келлера.