引言
在iOS開發(fā)過程中胞皱,根據項目需求拱绑,有很多情況下使用xib和storyboard會更加的方便。
xib針對的是單獨的一個UIViewController或者UIView所對應View的界面布局丽蝎。而storyboard所針對的是n多個UIViewController的界面布局以及UIViewController之間的跳轉關系猎拨,因此,在新建的空xib中屠阻,拖拉的第一個容器類應該是View而不是ViewController红省;但是在storyboard當中,拖拉的則應該是ViewController国觉,理清了這層關系吧恃,下面關于xib和storyboard的使用則進了一大步。
xib的使用
xib的使用主要包含兩類情況麻诀,一種是xib綁定UIView痕寓,另一種是xib綁定UIViewController,兩種方式蝇闭,略有不同呻率,大體上還都是一樣的原理。
一. xib綁定UIViewController
一般情況下呻引,在新建UIViewController的時候礼仗,會有一個復選框勾選來表示在新建UIViewController的時候是否要同時也建一個xib。如果需要xib的話逻悠,直接勾選即可元践。如圖1所示。
接下來主要說一下xib和UIViewController分別新建并綁定的情況童谒。
1. 新建工程(這個就不再細說了)
2. 在新建的工程當中单旁,直接 command+n 僅新建UIViewController。如圖2所示惠啄。
3. 接下來慎恒,直接創(chuàng)建xib文件(如圖3任内、圖4),xib文件可以和上面的UIViewController名字一樣融柬,也可以取不一樣的名字死嗦,不過為了編碼規(guī)范,為了方便以后代碼的維護等工作粒氧,最好是起和UIViewController類名一樣的名字越除。
4. 由于創(chuàng)建的是一個空的xib,所以要往里面拖一個View(要說明一點外盯,在storyboard當中是一對多的關系摘盆,并且在storyboard當中是拖的Controller。在xib當中應該是拖View)饱苟。如圖5所示孩擂。
5. 接下來至關重要的任務就是綁定UIViewController和xib。在xib中有一個File‘s Owner箱熬,首先要做的就是讓自己新建的HmTestController和xib綁定类垦,再者就是和新拖的View拖線綁定。如圖6城须、圖7所示蚤认。
6. 以上的步驟就已經完成了xib和UIViewController的綁定,接下來就跳轉加載當前頁了糕伐,代碼如圖8.1所示砰琢。如果ViewController的名字和xib文件的名字一樣,也可以使用圖8.2所示的代碼良瞧。
有一點要說明的是關于- (id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil;方法陪汽,點擊去可見詳細解釋如圖8.3所示。
OMG莺褒!一大堆英文掩缓,看得懂嗎?暈暈乎乎的遵岩。不過還是要借助各種手段耐心看你辣,理解到位〕局矗總體來說舍哄,上面的綠色英文的意思是說:如果你的subclass的一個UIViewController不管是否存在一個與之對應的NIB,都要調用[super initWithNibName:bundle]這個方法誊锭,這個方法將會在以下兩種情況下調用:
* 顯示調用, 指定一個nib名稱表悬,系統(tǒng)會去找指定的nib
* 在父類的Init方法中被調用,如果這種情況丧靡,兩個參數都會是nil蟆沫,系統(tǒng)會去找和你自定以的UIViewController相同名字的nib
如果系統(tǒng)找到nib文件籽暇,就會把nib文件中的內容加載進來,有一點需要解釋饭庞,initWithNibName:bundle方法并不會加載nib, 當UIViewController的view屬性第一次被使用的時候戒悠,系統(tǒng)就會調用UIViewController中的loadView方法,在這個方法中會加載nib文件舟山。
如此說來绸狐,就可以知道在圖8.1中NibName參數即便是傳一個nil,該xib文件還同樣是會被加載的累盗。所以也就可以理解為什么使用圖8.2中的代碼也可以被加載了寒矿。
二. xib綁定UIView
xib綁定UIView的情況在實際的應用開發(fā)過程中也是非常實用和常用的。比如在應用開發(fā)的過程中若债,某幾個頁面都需要使用到的一些元素符相,在Xcode中自帶的控件中并沒有,我們就可以自定義一些控件蠢琳,依次來滿足需求主巍。實現自定義控件可以實用純代碼布局,使用純代碼布局對于復雜的自定義控件是很好的選擇挪凑,并且使用純代碼自定義控件對于后期維護也是很方便的。除此之外逛艰,我們?yōu)榱丝焖匍_發(fā)躏碳,也可以使用xib來自定義控件,在Xcode當中散怖,新建UIView的時候是沒有選項可以同時新建xib文件的菇绵。所以就需要UIView和xib的綁定。
接下來就說說UIView和xib是如何進行綁定的
1. 同樣的新建項目镇眷,在此不過多贅述咬最。
2. command + n ?新建UIView。如圖9所示欠动。
3. 新建xib文件永乌。如圖10所示。
4. 既然是自定義控件具伍,這個控件也是基于UIView的翅雏,所以在空的xib文件中要拖拉的是UIView,而不是UIViewController人芽,這點謹記望几。如圖11。
5. 在View的size項改為Freeform之后萤厅,就可以根據實際需求隨意改變View的大小橄抹。最后就可以進行UIView和xib文件的綁定靴迫。
6. 調用TestView。代碼如圖13所示楼誓。
storyboard的使用
storyboard所代表的不僅僅是單獨一個UIViewController玉锌,而是多個ViewController以及其關系。下面就來介紹一下如何新建一個storyboard并使用慌随。
1. 老樣子芬沉,新建項目。
2. command + n 新建storyboard文件阁猜。如圖14丸逸、圖15所示。
3. 新建的storyboard當中為空剃袍,通常情況下黄刚,我們所建立的頁面當中都是包含UINavigationController的,所以我們要先拖一個NavigationController(也可以拖一個ViewController民效,當然要根據實際需求來了憔维,這里僅僅是以拖NavigationController為例)。如圖16所示畏邢。
關于圖中所說的业扒,為什么要勾選is initial view controller選項呢? 根據字面意思舒萎,就是說:是否要把當前選中的Controller作為初始視圖控制器程储,因為storyboard當中將會有多個Controller,在系統(tǒng)加載的時候臂寝,肯定要指定一個初始控制器章鲤。
除此之外,還要為storyboard設置一個id以此來辨別不同的storyboard咆贬。如圖17所示败徊。
4. 接下來再看拖出來的NavigationController的第二個Controller,他是一個一個帶有TableView的RootViewController掏缎,在很多情況下并不會符合我們的需求皱蹦,一個字,刪S恪(選中第二個Controller根欧,按delete刪除)刪除掉第二個Controller,再拖拉一個符合需求的Controller端蛆,并將其設置為RootViewController凤粗。這里以ViewController為例來說明了。如圖18所示。
除此之外嫌拣,還要為RootViewController設置一個id來辨別柔袁。如圖19所示。
5. 接下來在拖兩個ViewController VC1 和 VC 2异逐,并且在rootviewcontroller當中拖兩個button VC1 和 VC2捶索,點擊按鈕VC1跳轉到VC1界面,點擊按鈕VC2跳轉到VC2界面灰瞻。如圖20所示腥例。
6. 全部設置好以后的效果圖如圖21所示。
7. 全部設置完成以后酝润,就要能夠加載storyboard并展示在storyboard上的所有設置燎竖。如圖22所示為加載storyboard的代碼。
以上的代碼我是寫在一個按鈕事件當中的要销,不是在程序啟動的時候就加載這個storyboard的构回。
關于storyboard的講述到此為止。
總結
以上就是關于xib和storyboard的部分使用介紹疏咐,在具體的項目當中可以視具體情況來選擇是使用xib還是storyboard纤掸。不論使用哪種方法進行開發(fā),最終的目的就是為了開發(fā)更方便浑塞,更快速借跪,更利于項目的后期維護和迭代更新。