从storyboard和xib中加载控制器

作者: 高俊 | 来源:发表于2016-05-03 23:31 被阅读975次

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然后讨论一个问题)
Snip20160427_18.png
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.

而这个就是系统默认的做法  ,同时这样也说明了, 我们命名规范的重要性

相关文章

网友评论

    本文标题:从storyboard和xib中加载控制器

    本文链接:https://www.haomeiwen.com/subject/ccdrrttx.html