2017-03-11 11 views
0

それはビューを表す変数は、ストーリーボードのインスタンス化からその値を取得するように構成されているなどSegmentControllersを使用する方法の様々なチュートリアル、TabBarControllers、中:ナビゲーションコントローラがストーリーボードからのビューにアクセスするのはなぜですか?

private lazy var summaryViewController: SummaryViewController = { 
// Load Storyboard 
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 

// Instantiate View Controller 
var viewController = storyboard.instantiateViewController(withIdentifier: "SummaryViewController") as! SummaryViewController 

    // Add View Controller as Child View Controller 
    self.add(asChildViewController: viewController) 

    return viewController 
}() 

なぜこのコードは、単に取得していませんSummaryViewControllerのインスタンス?

答えて

1

ストーリーボードからVCのインスタンスを追加すると、ストーリーボードに追加したすべてのロジックとアウトレットが追加されます。

class MyVC : UIViewController { 

    func viewDidLoad() { 
    } 

    @IBAction buttonPressed(sender : UIButton) { 
     /// Do something 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "mySegue"{ 
      var vc = segue.destinationViewController as! WhateverViewController 
     } 
    } 
} 

のbuttonPressed:FUNCがIBでボタンに接続され、そしてあなたも「mySegue」識別子とセグエを持っているのは、あなたがVC(明らかにシンプル)次ているとしましょう。ストーリーボードからVCを初期化すると、これらのすべてにアクセスできます。ストーリーボードを使用せずに、VCをインスタンス化してプッシュすることはできますが、押しているVCがIBOutlets、IBActionsなどを結んでいるときは、そうしないでください。これをコードで実行したい場合は、次

let myNewVC = PushedViewController() 
self.navigationController?.pushViewController(myNewVC, animated : true) 

これはあなたのナビゲーションスタック、戻るボタンとすべての上に、ストーリーボードを使用せずにmyNewVCをプッシュします。

関連する問題