2017-08-25 20 views
3

この質問は、ストーリーボードが削除され、ウィンドウが作成され、アプリケーションデリゲートにルートビューが与えられているnibファイルを使用しないプログラムのみのアプリケーションに関係します。私はここに読んだ受け入れの回答の中には、Appleのドキュメントと矛盾するように見えるので、これが正しいかどうかを教えてください:UIViewControllerを作成する場合は、その基盤を作成する方法はなしloadViewに配置する必要がありますプログラム型のUI:super.loadViewを呼び出さず、super.viewDidLoadを呼び出しますか?

super.loadViewを呼び出します:

override func loadView() { 

    // build something 
    buildSomething() 

} 

そしてsuper.viewDidLoadを呼び出して、最終的なタッチがviewDidLoadに配置する必要があります作る方法:

// view did load 
override func viewDidLoad() { 
    super.viewDidLoad() 

    // arrange something that requires it be built first 
    arrangeSomething() 

} 

特別な状況でのみsuper.viewDidLoad()を呼び出す必要がありますか?もしそうなら、彼らは何ですか?

+0

"答え... Appleのドキュメントと競合しています..." ...あなたがあなたの質問を編集してそれらへの参照を含めるまで、それらにコメントすることはできません。 – Rob

答えて

4

loadViewを実装した場合は、superに電話をかけないでください。としてthe documentationは言う:

このメソッドのカスタム実装はsuperを呼び出すべきではありません。

viewDidLoadを実装する場合は、常にsuperを呼び出す必要があります。

+0

フォローアップ:プログラムですべてを実行する場合、UIWindowはアプリデリゲートで一度しか呼び出されません。そして、UIViewControllerを作成するとき、Appleはビュー階層のルートビューをビュープロパティに割り当てます。つまり、UIViewを作成して画面の境界を作成し、それをself.viewに貼り付けます。 – sconewolf

+0

@sconewolf - うん。従来の[iOS用View Controllerプログラミングガイド](https://developer.apple.com/legacy/library/documentation/WindowsViews/Conceptual/ViewControllerPGforiOSLegacy/BasicViewControllers/BasicViewControllers.html)の「プログラムによるビューの作成」を参照してください。あなたのコメントの私の唯一の洗練は、 'view'の境界を設定することは実際にそれが提示された誰かに属していることです(' application(_:didFinishLaunchingWithOptions:) 'では' loadView'ではなく)。 – Rob

+0

コンセプトは完璧な意味合いを持っているので、super.loadViewを取り出して、私のUIPageViewControllerが変わってしまっています。あなたも見て気軽に編集できますか? )私が作成したばかりのこの公開趣旨?https://gist.github.com/sconewolf/22f5767193df9148ca15c894ffcce4de – sconewolf

関連する問題