1 - 从storyboard 中加载控制器
有时候, 我们虽然是自己通过代码来创建window, 但是有时候
我们还需要从我们的storyboard中加载, 所以
我们现在讲的是如何从storyboard中加载控制器
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//1.创建窗口
window = UIWindow()
//2.设置窗口根控制器
//2.1从StoryBoard当中加载控制器
let sb = UIStoryboard(name: "Main", bundle: nil)
//2.1.1加载StoryBoard中当箭头指向的控制器
//let vc = sb.instantiateInitialViewController()
//2.1.2加载StoryBoard当中指定标识的控制器
let vc = sb.instantiateViewControllerWithIdentifier("yellowVC")
window?.rootViewController = vc
//3.显示窗口
window?.makeKeyAndVisible()
return true
}
我们的这个从storyboard中加载控制器
上面的的yellowVC是我们其中一个控制器的标识
2 - 从Xib中加载控制器的View
2.1 - 首先, 我们先创建一个类, 充当我们Xib的控制器(RootViewController)
2.2 - 其次, 我们需要创建Xib并在我们的Xib中进行一些步骤.
当然, 我们的Xib名称先是One(后面, 我们将继续创建Xib然后讨论一个问题)
2.2 设置file owner类名
注意上面的三个红框框, 必须选择红框框的按钮, 并写上相应的类名
2.3 连线
如何连线, 将谁和谁相连???下面这张图就是解释了这个问题:
不连线的后果(系统会崩溃) 至于为什么要连这个线, 在后面, 会有解释的
2.4 . 代码加分析:
2.4.1 代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//1.创建窗口
window = UIWindow(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.height, UIScreen.mainScreen().bounds.size.height))
//2.设置窗口根控制器.
//XMGViewController 的init方法, 会调用 init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)方法
//nibName:如果指定为nil, 那么它会默认加载跟它相同名称的xib.
//如果没有跟它相同名称的控制器.那么它就会自动加载跟它相同名称去掉controller的xib.
//如果都没有,创建一个空的view.
let rootVC = XMGViewController(nibName: nil, bundle: nil)
window?.rootViewController = rootVC
//3.显示窗口
window?.makeKeyAndVisible()
return true
}
上面我们说过, 我们会在后面继续创建Xib的, 然后, 发现问题, 并解释它
我们再创建一个Xib名称叫`RootView` (其他步骤一样)
2.4.2我们在这个方法中这样写
let rootVC = XMGViewController(nibName: nil, bundle: nil)
window?.rootViewController = rootVC
我们们会发现他会加载这个Xib
那我们继续创建Xib名称叫`RootViewcontroller` (其他步骤一样)
他会加载哪一个Xib???
他会加载的是: 叫做: RootViewController的Xib
如果我们将这个Xib删掉, 他会加载叫做: `RootView`的Xib
**2.4.3为什么: **
如果没有指定加载Xib的名称
他会先去加载跟它相同名称的xib(RootViewController)
如果没有相同名称的Xib.再去加载去掉跟它相同名称去掉Controller(RootView.xib)
如果也没有,它会创建一个空的View.
而这个就是系统默认的做法 ,同时这样也说明了, 我们命名规范的重要性