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