为什么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
。
-
故事板:你有故事板,devise你的VC并通过故事板实例化它。 在这种情况下,你必须告诉系统你的VC有哪些故事板以及它的ID是什么。 正如你在上面的代码所做的。
- 参考: https : //developer.apple.com/library/content/documentation/General/Conceptual/Devpedia-CocoaApp/Storyboard.html
-
Xib / Nib:和storyboard一样,你可以使用
xib/nib
devise你的VC。 这里只需要通过xib名称来分配VC。- Referal: https : //developer.apple.com/library/content/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html
-
以编程方式:在这里你不需要任何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的视图控制器,但没有任何链接到你的故事板,这不太可能对你有任何用处(为什么你使用故事板,如果不获得这些链接?)。 你需要从故事板实例化它来获得这些链接。