조금 다른 또 다른 해결책이 있습니다.
나는 몇 가지보기 계층 문제로 인해 그것을 사용해야했다. 나는 UITableViewController의 tableview b / c를 사용할 때 깨지는보기 계층 구조의 다른 장소로 뷰를 전달 해야하는 기능을 만들고 있었다. self.view)는 일반보기뿐만 아니라 일관성없는 컨트롤러 /보기 계층을 생성하여 충돌을 일으켰습니다.
기본적으로 고유 한 UITableViewController 하위 클래스를 만들고 loadView를 재정 의하여 self.view에 다른 뷰를 할당하고 tableView 속성을 재정 의하여 별도의 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
Keller의 솔루션과 결합하면 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를 일반 컨트롤러로 사용하고 UITableView에 서브 뷰를 추가 할 필요없이 self.view에 다른 서브 뷰를 추가 할 수 있습니다. UITableViewController 자식을 갖지 않고 직접 컨트롤러를 UITableViewController의 서브 클래스로 봅니다.
주의해야 할 사항 :
super를 호출하지 않고 tableView 속성을 재정의하므로 필요한 경우주의해야 할 사항이 있습니다. 예를 들어, 위의 예제에서 tableview를 설정하면 self.view에 tableview가 추가되지 않고 원하는 프레임이 설정되지 않습니다. 또한이 구현에는 클래스가 인스턴스화 될 때 제공되는 기본 tableView가 없으며 추가 할 수도 있습니다. 경우에 따라 여기에 포함되지 않으며이 솔루션은 실제로 Keller의 솔루션과 잘 맞습니다.