İşte biraz farklı olan başka bir çözüm.
Ben vardı bazı görünüm hiyerarşi sorunları nedeniyle kullanmak zorunda kaldı: Ben görünüm hiyerarşisinde farklı yerlere etrafında görünüm gerektiren bir işlevsellik oluşturuyordu, bir UITableViewController tablo görünümü b / c kullanırken tableView UITableViewController kök görünümü ( self.view) ve yalnızca normal bir görünüm değil, tutarsız denetleyici / görünüm hiyerarşileri oluşturdu ve bir çökmeye neden oldu.
Temel olarak kendi UITableViewController alt sınıfınızı oluşturun ve self.view'i farklı bir görünüm atamak için loadView'i geçersiz kılın ve ayrı bir tablo görünümü döndürmek için tableView özelliğini geçersiz kılın.
Örneğin:
@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
Keller'in çözümü ile birleştirildiğinde, bu, tableView'in artık bir VC'nin kök görünümü değil, normal bir görünüm olduğu ve görünüm hiyerarşilerinin değiştirilmesine karşı daha sağlam olacağı anlamında daha sağlam olacaktır. Bu şekilde kullanma örneği:
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;
Bunun başka bir olası kullanımı daha vardır:
Bu şekilde alt sınıflama self.view dosyasını self.tableView öğesinden ayırdığından, artık bu UITableViewController'ı normal bir denetleyici olarak kullanmak ve UITableView'a alt görünüm ekleme tuhaflıkları olmadan self.view'e başka alt görünümler eklemek mümkündür. Görünüm denetleyicileri, UITableViewController alt öğelerine sahip olmak yerine doğrudan bir UITableViewController alt sınıfına sahiptir.
Dikkat edilmesi gereken bazı şeyler:
Süper çağırmadan tableView özelliğini geçersiz kıldığımız için, dikkat edilmesi gereken bazı şeyler olabilir ve gerektiğinde işlemesi gerekir. Örneğin, yukarıdaki örneğimde tablo görünümünü ayarlamak, self.view öğesine tablo görünümünü eklemez ve yapmak isteyebileceğiniz çerçeveyi ayarlamaz. Ayrıca, bu uygulamada, sınıf somutlaştırıldığında size verilen varsayılan tableView yoktur, bu da eklemeyi düşünebileceğiniz bir şeydir. Buraya dahil etmiyorum çünkü bu duruma göre ve bu çözüm aslında Keller'in çözümüne çok iyi uyuyor.