UIViewControllerにカスタムビューをセットするときは、いつも以下のようにviewDidLoadでセットしていたのですが、loadViewというメソッドがあるという事に気付いて調べてみました。
-(void)viewDidLoad { [super viewDidLoad]; UIView *customView = [[UIView alloc] iniaWithFrame:self.view.frame]; [self setView:customView]; }
・loadViewが呼び出されるタイミングは、viewDidLoadの前
・loadViewのタイミングでviewを調べてもnil
・viewDidLoadのときにはviewが生成されている
上記の事から、viewをセットするときにはloadViewを使うほうがいいのかなと。
あと、[super loadView]は呼ぶべきなのかどうかも曖昧だったのでappleの公式ドキュメントを読んだのですが、カスタムビューを使用するときには呼ぶべきではないとの事でした。
こんな感じの実装
- (void)loadView { UIView *customView = [[UIView alloc] init]; [self.setView:customView]; }
ただし、UIViewControllerのviewにカスタムビューをセットしない場合は[super loadView]を呼ばないと、UIViewControllerのviewが生成されていないためにエラーになります。
これとか
- (void)loadView { UIView *view = [[UIView alloc] init]; [self.view addSubview:view]; }
以下、注意点です。
・Interface Builderを使用する場合は、loadViewはオーバーライドしてはいけない
・loadViewをオーバーライドする場合は必ずself.viewへの設定をするか[super loadView]を呼ぶこと。呼ばずにviewDidLoad内で、self.viewを参照すると無限ループに陥る
・loadViewをオーバーライドすると、nibファイルの読み込みは行われない
しっかり公式ドキュメントは読まないといけないなと感じました、、