为什么instantiateViewContoller是必要的?

为什么我不能像resultVC = ResultViewController()那样使用sth来创build视图控制器对象,而不是使用下面的方法。

  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) 

一切都取决于你的逻辑。 有三种基本的方法可以创buildUIViewController

  1. 故事板:你有故事板,devise你的VC并通过故事板实例化它。 在这种情况下,你必须告诉系统你的VC有哪些故事板以及它的ID是什么。 正如你在上面的代码所做的。

    • 参考: https : //developer.apple.com/library/content/documentation/General/Conceptual/Devpedia-CocoaApp/Storyboard.html
  2. Xib / Nib:和storyboard一样,你可以使用xib/nibdevise你的VC。 这里只需要通过xib名称来分配VC。

    • Referal: https : //developer.apple.com/library/content/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html
  3. 以编程方式:在这里你不需要任何types的xib / storyboard。 你必须通过代码来做所有事情。 你的VCdevise将会在你自己的VC文件中。 这里你只需要分配这个文件。

    • Referal: 如何使视图控制器没有xib或故事板vc标识符? 或者在没有故事板的情况下启动ios项目

区别: 哪种方法更有效? StoryBoard或XIB?

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

您可以使用此方法来创build要在应用程序中以编程方式操作和呈现的视图控制器对象。 在使用此方法检索视图控制器之前,必须在Interface Builder中用适当的标识符string显式标记它。

所以,你不只是分配你的类,而是将你的类与Interface Builder专用屏幕联系起来。

无论如何,你可以像你想要的resultVC = ResultViewController()创build你的控制器,但是你应该在代码中创build所有的UI而不是使用Interface Builder

使用resultVC = ResultViewController()将创build一个types为ResultViewController的视图控制器,但没有任何链接到你的故事板,这不太可能对你有任何用处(为什么你使用故事板,如果不获得这些链接?)。 你需要从故事板实例化它来获得这些链接。