2017-10-08 3 views
0

次の方法の代わりに resultVC = ResultViewController()のようなsthを使用してビューコントローラオブジェクトを作成できないのはなぜですか? resultVC = ResultViewController()を使用してなぜinstantiateViewContollerが必要ですか?

 let storyboard = UIStoryboard (name: "Main", bundle: nil) 
     let resultVC = storyboard.instantiateViewController(withIdentifier: "ResultViewController") as! ResultViewController 

     // Communicate the match 
     resultVC.match = self.match 
     self.navigationController?.pushViewController(resultVC, animated: true) 
+1

そうすることで、UIKitはインスタンス化のためにクラス(ResultViewController.xib)と同じ名前のペン先を探しますが、ストーリーボードを使用しているので、私はそれを信じませんストーリーボードを使用して自動的にインスタンス化します。 – YoCoh

+1

実際、@YoCohのように、メインバンドルのView Controllerと同じ名前のnibファイルがあり、 'init(nibName:bundle:)'を別の名前で上書きしないと束ねる。 –

答えて

1

すべてがあるが、あなたのロジックに依存したコードの代わりに使用してすべてのUIを作成する必要があります。 UIViewControllerを作成するには3つの基本的な方法があります。

  1. ストーリーボード:あなたはストーリーボードを持って、あなたのVCを設計し、ストーリーボードを経由して、それをインスタンス化します。 この場合、VCにどのストーリーボードがどのIDであるのかを伝える必要があります。 上記のコードで行ったとおりです。

  2. XIB /ペン先:ストーリーボードのよう、あなたはxib/nibを使用し、VCを設計することができます。ここではxib名でVCを割り当てる必要があります。

  3. ここでは、XIB /ストーリーボードの任意の型を必要とscroll down toパソコンへ転送。すべてをコードで行う必要があります。 VCデザインはそれぞれのVCファイルに格納されます。ここでは、そのファイルをただ割り当てなければなりません。

違い:Which is more efficient way? StoryBoard or XIB?

あなたはまだ不明であれば、お願いします。

0

はあなたに任意の使用の可能性は低いである、型ResultViewControllerのビューコントローラを作成しますが、あなたのストーリーボードへのリンクなします(ない場合は、なぜあなたはこれらのリンクを得るためにストーリーボードを使用していますか?) 。これらのリンクを獲得するには、ストーリーボードからインスタンス化する必要があります。

0

このメソッドを使用して、 をプログラムで操作してアプリケーションに表示するビューコントローラーオブジェクトを作成します。 の前に、このメソッドを使用してビューコントローラを取得することができます。 は、Interface ビルダーの適切な識別子文字列で明示的にタグ付けする必要があります。

したがって、クラスを割り当てるだけでなく、Interface Builderのクラスを適切な画面に関連付けることもできます。

とにかく、あなたがresultVC = ResultViewController()をしたいようにあなたは、あなたのコントローラを作成することができますが、あなたはInterface Builder

関連する問題