從storyboard和xib中加載控制器

1 - 從storyboard 中加載控制器

  有時候, 我們雖然是自己通過代碼來創(chuàng)建window, 但是有時候
  我們還需要從我們的storyboard中加載, 所以
  我們現(xiàn)在講的是如何從storyboard中加載控制器  
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    //1.創(chuàng)建窗口
    window = UIWindow()
    //2.設(shè)置窗口根控制器
    //2.1從StoryBoard當(dāng)中加載控制器
    let sb = UIStoryboard(name: "Main", bundle: nil)
    //2.1.1加載StoryBoard中當(dāng)箭頭指向的控制器
    //let vc = sb.instantiateInitialViewController()
    
    //2.1.2加載StoryBoard當(dāng)中指定標(biāo)識的控制器
    let vc = sb.instantiateViewControllerWithIdentifier("yellowVC")
    window?.rootViewController = vc
    //3.顯示窗口
    window?.makeKeyAndVisible()
    
    return true
}

 我們的這個從storyboard中加載控制器
上面的的yellowVC是我們其中一個控制器的標(biāo)識   

2 - 從Xib中加載控制器的View

2.1 - 首先, 我們先創(chuàng)建一個類, 充當(dāng)我們Xib的控制器(RootViewController)
2.2 - 其次, 我們需要創(chuàng)建Xib并在我們的Xib中進行一些步驟.
當(dāng)然, 我們的Xib名稱先是One(后面, 我們將繼續(xù)創(chuàng)建Xib然后討論一個問題)
Snip20160427_18.png
2.2 設(shè)置file owner類名
注意上面的三個紅框框, 必須選擇紅框框的按鈕, 并寫上相應(yīng)的類名  
2.3 連線
如何連線, 將誰和誰相連???下面這張圖就是解釋了這個問題:  
不連線的后果(系統(tǒng)會崩潰) 至于為什么要連這個線, 在后面, 會有解釋的  
2.4 . 代碼加分析:

2.4.1 代碼

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
    
    //1.創(chuàng)建窗口
    window = UIWindow(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.height, UIScreen.mainScreen().bounds.size.height))
    //2.設(shè)置窗口根控制器.
    //XMGViewController 的init方法, 會調(diào)用 init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)方法
    
    //nibName:如果指定為nil, 那么它會默認(rèn)加載跟它相同名稱的xib.
    //如果沒有跟它相同名稱的控制器.那么它就會自動加載跟它相同名稱去掉controller的xib.
    //如果都沒有,創(chuàng)建一個空的view.
    let rootVC = XMGViewController(nibName: nil, bundle: nil)
    
    window?.rootViewController = rootVC
    
    
    //3.顯示窗口
     window?.makeKeyAndVisible()
    return true
   
}

上面我們說過, 我們會在后面繼續(xù)創(chuàng)建Xib的, 然后, 發(fā)現(xiàn)問題, 并解釋它  

我們再創(chuàng)建一個Xib名稱叫`RootView`  (其他步驟一樣)

2.4.2我們在這個方法中這樣寫

    let rootVC = XMGViewController(nibName: nil, bundle: nil)
    
    window?.rootViewController = rootVC
    


我們們會發(fā)現(xiàn)他會加載這個Xib  

那我們繼續(xù)創(chuàng)建Xib名稱叫`RootViewcontroller` (其他步驟一樣) 

他會加載哪一個Xib??? 

他會加載的是: 叫做: RootViewController的Xib  

如果我們將這個Xib刪掉, 他會加載叫做: `RootView`的Xib  

**2.4.3為什么: **

如果沒有指定加載Xib的名稱  
他會先去加載跟它相同名稱的xib(RootViewController)  
如果沒有相同名稱的Xib.再去加載去掉跟它相同名稱去掉Controller(RootView.xib)  
如果也沒有,它會創(chuàng)建一個空的View.

而這個就是系統(tǒng)默認(rèn)的做法  ,同時這樣也說明了, 我們命名規(guī)范的重要性
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容