2017-01-26 20 views
0

私は3つのビューコントローラとコンテナビューコントローラを持っています。これら3つのビューコントローラをコンテナ内の子ビューコントローラとして追加します。私は、アプリケーションを起動すると、私はviewDidloadとviewDidAppearで実行されるすべてのビューコントローラでprintステートメントを持っています。viewDidloadとviewDidAppearが呼び出されていませんか?

問題は次のとおりです。これらのビューを「スクロール」して再び「表示」すると、printDidAppearやviewDidLoad内でprintステートメントが実行されずコードも実行されません。なぜこうなった?

ここで私のビューコントローラをインスタンス化するコードです。助けてくれてありがとう!ライフサイクルを通じてコントローラサイクルにそれらのビューをトリガーする何

override func viewDidLoad() { 
    super.viewDidLoad() 

    scrollView.delegate = self 



    let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    page1 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.feedViewController.rawValue) as! FeedViewController 
    page1.view.translatesAutoresizingMaskIntoConstraints = false 
    page1.delegate = self 
    scrollView.addSubview(page1.view) 
    addChildViewController(page1) 
    page1.didMove(toParentViewController: self) 

    page2 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.favoritesViewController.rawValue) as! FavoritesViewController 
    page2.view.translatesAutoresizingMaskIntoConstraints = false 
    page2.delegate = self 
    scrollView.addSubview(page2.view) 
    addChildViewController(page2) 
    page2.didMove(toParentViewController: self) 

    page3 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.settingsViewController.rawValue) as! SettingsViewController 
    page3.view.translatesAutoresizingMaskIntoConstraints = false 
    scrollView.addSubview(page3.view) 
    addChildViewController(page3) 
    page3.didMove(toParentViewController: self) 


} 

答えて

0

名前が何であれ、親ビューコントローラはロードサイクルを実行します。すべてのビューは、そのビューも実行されます。 (私はあなたがビューをサブクラス化し、それを使ってdrawpoint(rect :)にブレークポイントを置くと賭けています)しかし、子ビューコントローラを起動させることは何もありません。私が見たものから、

は、あなたのビュー階層は次のとおりです。

  • メインビュー
  • スクロールビューメインビュー内のスクロールビューの内側
  • 三ページビュー

メインビュー(前述の親ビューコントローラ)がロードされると、通常はviewDidLoadviewWillAppearviewWillLoadSubviews ....、それはthere上記のすべてのビューが読み込まれ、レイアウトされ、描画されます。

これらの3つのページコントローラーをロードするようなことは何も起きていません。

+0

詳細な回答をいただきありがとうございます。だから、私はスクロールビュー内にある3つのビューコントローラにスクロールするように私の理解から、viewDidAppearなどがロードされてから再度トリガされないだろうか?もう一度スクロールしても? (これは本当に新しい!)また、私は "彼らのライフサイクルを循環させるために、それらのView Controllerが何を引き起こすのだろうか?"その特定のビューをスクロールすると、そのビューが実行されます。しかし、私はないと思いますか? – user7097242

+0

前回の質問でこれを聞いたことがあります.3つのVCの理由は何ですか? UIViewとUIViewControllerを混同しないでください。 (これは初心者にとってはよくある間違いですが、私はあなたに関してこのことを言っています)。親VCはスクロールビュー**とその中のすべてのビューを制御します。私の古いバージョンのアプリケーションでは、UIPageViewと、2つのGLKViews(UIViewsに似ています)で動作するUIScrollViewがありました。そのすべて(画像のロード、スクロールウィンドウ、ページコントロールの変更)は、単一のUIViewControllerで処理されました。私はこれに追加します.... – dfd

+0

私はそのコードを共有したいので、フレームワーク内の関数に画像処理をオフロードしました。オートレイアウトを別のファイルにオフロードしました。スクロールビューとページビューデリゲートの処理をUIViewController拡張に移動しました。それ以外の場合は、大量のビューコントローラが必要になります。私はまた、いくつかの拡張も行った。しかし、これらの2つのコメントの要点は、 - 自分のコントローラを持つためにスクロールビューにビューを持たせるために、**具体的な必要性**を持っていなければ(そして、あるかもしれない)、あなたは意図しない副作用。 – dfd