Вот еще одно решение, которое немного отличается.
Мне пришлось использовать его из-за некоторых проблем с иерархией представлений, которые у меня были: я создавал некоторые функциональные возможности, которые требовали передачи представлений в разные места в иерархии представлений, которые ломались при использовании табличного представления UITableViewController, поскольку 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, не вызывая super, могут быть некоторые вещи, на которые следует обратить внимание, и которые необходимо обработать при необходимости Например, установка tableview в моем примере выше не добавит tableview к self.view и не установит кадр, который вы, возможно, захотите сделать. Кроме того, в этой реализации нет табличного представления по умолчанию, предоставленного вам при создании экземпляра класса, что также можно рассмотреть при добавлении. Я не включаю это здесь, потому что это в каждом конкретном случае, и это решение действительно хорошо согласуется с решением Келлера.