为什么instantiateViewContoller是必要的?

时间:2017-10-08 07:22:29

标签: ios swift viewcontroller

为什么我不能使用类似的方法创建视图控制器对象 resultVC = ResultViewController()而不是以下方式。

        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)

3 个答案:

答案 0 :(得分:1)

一切都取决于你的逻辑。您可以通过三种基本方式创建UIViewController

  1. 故事板:您有故事板,设计您的VC并通过故事板进行实例化。 在这种情况下,您必须告诉系统您的VC具有哪些故事板以及它的ID。 正如您在上面的代码中所做的那样。

  2. Xib / Nib:与故事板一样,您可以使用xib/nib设计VC。这里只需要通过xib名称分配VC。

  3. 以编程方式:在这里,您不需要任何类型的xib / storyboard。你必须通过代码完成所有事情。您的VC设计将在您的VC文件中。在这里你只需要分配该文件。

  4. 差异: Which is more efficient way? StoryBoard or XIB?

    如果你还不清楚,那就问。

答案 1 :(得分:0)

使用resultVC = ResultViewController()将创建一个ResultViewController类型的视图控制器,但没有任何指向你的故事板的链接,这对你没有任何用处(如果不获取这些链接,你为什么要使用故事板?) 。您需要从故事板中实例化它以获得这些链接。

答案 2 :(得分:0)

  

您可以使用此方法创建所需的视图控制器对象   在您的应用程序中以编程方式操作和呈现。之前   您必须使用此方法来检索视图控制器   在Interface中使用适当的标识符字符串显式标记它   助洗剂。

因此,您并不只是分配您的课程,而是将您的课程与Interface Builder中的专用屏幕相关联。

无论如何,您可以按照自己想要的resultVC = ResultViewController()创建控制器,但是您应该在代码中创建所有用户界面,而不是使用Interface Builder