Ecco un'altra soluzione leggermente diversa.
Ho dovuto usarlo a causa di alcuni problemi di gerarchia della vista che avevo: stavo creando alcune funzionalità che richiedevano il passaggio di viste in luoghi diversi nella gerarchia della vista, che si interrompeva quando si utilizzava la vista tabella di UITableViewController b / c la vista tabella è la vista radice di UITableViewController ( self.view) e non solo una vista normale, ha creato gerarchie di controller / viste incoerenti e ha causato un arresto anomalo.
Fondamentalmente creare la propria sottoclasse di UITableViewController e sovrascrivere loadView per assegnare self.view una vista diversa e sovrascrivere la proprietà tableView per restituire una vista tabella separata.
per esempio:
@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
Se combinato con la soluzione di Keller, questo sarà più robusto nel senso che tableView è ora una vista normale, non una vista radice di VC, ed è più robusto contro il cambiamento delle gerarchie di viste. Esempio di utilizzo in questo modo:
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;
C'è un altro possibile utilizzo per questo:
Poiché la sottoclasse in questo modo separa self.view da self.tableView, è ora possibile utilizzare questo UITableViewController come più di un normale controller e aggiungere altre subview a self.view senza le stranezze dell'aggiunta di subview a UITableView, quindi si potrebbe prendere in considerazione l'idea di creare il proprio visualizza i controller direttamente una sottoclasse di UITableViewController invece di avere figli UITableViewController.
Alcune cose a cui prestare attenzione:
Poiché stiamo sovrascrivendo la proprietà tableView senza chiamare super, potrebbero esserci alcune cose a cui fare attenzione e che dovremmo gestire dove necessario. Ad esempio, l'impostazione del tableview nel mio esempio precedente non aggiungerà il tableview a self.view e non imposterà il frame che potresti voler fare. Inoltre, in questa implementazione non viene fornito tableView predefinito quando viene istanziata la classe, che è anche qualcosa che potresti considerare di aggiungere. Non lo includo qui perché caso per caso, e questa soluzione si adatta perfettamente alla soluzione di Keller.