Hier ist eine andere Lösung, die etwas anders ist.
Ich musste es aufgrund einiger Probleme mit der Ansichtshierarchie verwenden: Ich erstellte einige Funktionen, die das Weitergeben von Ansichten an verschiedene Stellen in der Ansichtshierarchie erforderten, was bei Verwendung der Tabellenansicht eines UITableViewController fehlerhaft war. B / c Die Tabellenansicht ist die Stammansicht des UITableViewController ( self.view) und nicht nur eine reguläre Ansicht, sondern inkonsistente Controller- / Ansichtshierarchien erstellt und einen Absturz verursacht.
Erstellen Sie im Grunde eine eigene Unterklasse von UITableViewController und überschreiben Sie loadView, um self.view eine andere Ansicht zuzuweisen, und überschreiben Sie die tableView-Eigenschaft, um eine separate Tabellenansicht zurückzugeben.
beispielsweise:
@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
In Kombination mit Kellers Lösung ist dies robuster in dem Sinne, dass die tableView jetzt eine reguläre Ansicht ist, nicht die Stammansicht eines VC, und robuster gegen sich ändernde Ansichtshierarchien ist. Beispiel für die Verwendung auf diese Weise:
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;
Es gibt eine andere mögliche Verwendung dafür:
Da die Unterklasse auf diese Weise self.view von self.tableView trennt, ist es jetzt möglich, diesen UITableViewController eher als regulären Controller zu verwenden und self.view andere Unteransichten hinzuzufügen, ohne dass UITableView seltsamerweise Unteransichten hinzugefügt werden muss Zeigen Sie Controller direkt als Unterklasse von UITableViewController an, anstatt UITableViewController-Kinder zu haben.
Einige Dinge, auf die Sie achten sollten:
Da wir die tableView-Eigenschaft überschreiben, ohne super aufzurufen, müssen möglicherweise einige Dinge beachtet werden, die bei Bedarf behandelt werden sollten. Wenn Sie beispielsweise die Tabellenansicht in meinem obigen Beispiel festlegen, wird die Tabellenansicht nicht zu self.view hinzugefügt und der Rahmen, den Sie möglicherweise ausführen möchten, nicht festgelegt. In dieser Implementierung wird Ihnen auch keine Standard-Tabellenansicht gegeben, wenn die Klasse instanziiert wird. Dies können Sie auch hinzufügen. Ich füge es hier nicht ein, weil das von Fall zu Fall ist und diese Lösung tatsächlich gut zu Kellers Lösung passt.