UIViewControllerはXIBファイルと1対1になるよう作るのが基本だと思うが、それだとXIBファイルが細切れになりすぎてわかりにくい。
例えば、UITableViewControllerを継承したMyTableViewControllerを作った場合、UITableViewController.xibはTableView一つだけになることが多い。
これよりは親ビューと同じXIBファイルにTableViewを入れた方がテーブルを配置しやすいし、画面のレイアウトがわかりやすいと思う。
よってUIViewControllerのインスタンス変数「view」にXIBファイル内で定義されたUIViewを代入したい。
これは普通に書くと以下のようになるが、うまくいかない。
- (void)viewDidLoad{ [super viewDidLoad]; self.tableViewController = [[UIViewController alloc] init]; self.tableViewController.view = self.aTableView; }
正しくはloadViewメソッドを定義してその中でviewに代入する。
- (UITableView *)view{ return (UITableView *)[super view]; } - (void)loadView { [super setView:self.tempView]; self.tempView = nil; } - (id)initWithView:(UITableView *)view{ if ((self = [super init])){ self.tempView = view; } return self; }
呼び出し側は以下。
return [[UITableView alloc] initWithView:self.aTableView];
こうすると一つのXIBファイルに複数のUIViewControllerをひもづけることができる。