我创建了新文件,然后检查Cocoa Touch Class
- >然后我将子类设置为UIViewController
- >我标记“还创建XIB文件”。
它按预期创建了简单的UIViewController
,但这是我的问题,因为我打电话:
present(MyViewController(), animated: true)
这显示了我想要的MyViewController()
但是我怎么可能使用简单的init()
和Nib加载?
我认为我需要使用不同的initalizer,Swift是如何做到的?
答案 0 :(得分:3)
这不是“斯威夫特”这样做的。这是UIViewController
类的实现。 Objective-C也是如此。
首先阅读UIViewController init(nibName:bundle:)
方法和nibName
属性的文档。
来自nibName
文档:
如果使用nib文件存储视图控制器的视图,建议您在初始化视图控制器时明确指定该nib文件。但是,如果未指定nib名称,并且未覆盖自定义子类中的loadView()方法,则视图控制器将使用其他方法搜索nib文件。具体来说,它会查找具有适当名称(不带.nib扩展名)的nib文件,并在请求其视图时加载该nib文件。具体来说,它(按顺序)查找具有以下名称之一的nib文件:
如果视图控制器类名以单词'Controller'结尾,就像在MyViewController中那样,它会查找名称与类名匹配的nib文件,而不是像'MyView.nib那样的单词'Controller'。 / p>
- 醇>
它查找名称与视图控制器类名称匹配的nib文件。例如,如果类名是MyViewController,它会查找MyViewController.nib文件。
基本上,在您的情况下,您使用默认初始化程序,这意味着您为笔尖名称指定了nil
。因此,在运行时,将自动找到并使用您创建的与视图控制器类同名的nib。