簡談xib storyboard的使用

引言

在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所示。

圖 1

接下來主要說一下xib和UIViewController分別新建并綁定的情況童谒。

1. 新建工程(這個就不再細說了)

2. 在新建的工程當中单旁,直接 command+n 僅新建UIViewController。如圖2所示惠啄。

圖 2

3. 接下來慎恒,直接創(chuàng)建xib文件(如圖3任内、圖4),xib文件可以和上面的UIViewController名字一樣融柬,也可以取不一樣的名字死嗦,不過為了編碼規(guī)范,為了方便以后代碼的維護等工作粒氧,最好是起和UIViewController類名一樣的名字越除。


圖 3


圖 4

4. 由于創(chuàng)建的是一個空的xib,所以要往里面拖一個View(要說明一點外盯,在storyboard當中是一對多的關系摘盆,并且在storyboard當中是拖的Controller。在xib當中應該是拖View)饱苟。如圖5所示孩擂。

圖 5

5. 接下來至關重要的任務就是綁定UIViewController和xib。在xib中有一個File‘s Owner箱熬,首先要做的就是讓自己新建的HmTestController和xib綁定类垦,再者就是和新拖的View拖線綁定。如圖6城须、圖7所示蚤认。

圖 6
圖 7

6. 以上的步驟就已經完成了xib和UIViewController的綁定,接下來就跳轉加載當前頁了糕伐,代碼如圖8.1所示砰琢。如果ViewController的名字和xib文件的名字一樣,也可以使用圖8.2所示的代碼良瞧。

圖 8.1
圖 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中的代碼也可以被加載了寒矿。

圖 8.3

二. xib綁定UIView

xib綁定UIView的情況在實際的應用開發(fā)過程中也是非常實用和常用的。比如在應用開發(fā)的過程中若债,某幾個頁面都需要使用到的一些元素符相,在Xcode中自帶的控件中并沒有,我們就可以自定義一些控件蠢琳,依次來滿足需求主巍。實現自定義控件可以實用純代碼布局,使用純代碼布局對于復雜的自定義控件是很好的選擇挪凑,并且使用純代碼自定義控件對于后期維護也是很方便的。除此之外逛艰,我們?yōu)榱丝焖匍_發(fā)躏碳,也可以使用xib來自定義控件,在Xcode當中散怖,新建UIView的時候是沒有選項可以同時新建xib文件的菇绵。所以就需要UIView和xib的綁定。

接下來就說說UIView和xib是如何進行綁定的

1. 同樣的新建項目镇眷,在此不過多贅述咬最。

2. command + n ?新建UIView。如圖9所示欠动。

圖 9

3. 新建xib文件永乌。如圖10所示。

圖 10

4. 既然是自定義控件具伍,這個控件也是基于UIView的翅雏,所以在空的xib文件中要拖拉的是UIView,而不是UIViewController人芽,這點謹記望几。如圖11。

圖 11

5. 在View的size項改為Freeform之后萤厅,就可以根據實際需求隨意改變View的大小橄抹。最后就可以進行UIView和xib文件的綁定靴迫。

圖 12

6. 調用TestView。代碼如圖13所示楼誓。

圖 13

storyboard的使用

storyboard所代表的不僅僅是單獨一個UIViewController玉锌,而是多個ViewController以及其關系。下面就來介紹一下如何新建一個storyboard并使用慌随。

1. 老樣子芬沉,新建項目。

2. command + n 新建storyboard文件阁猜。如圖14丸逸、圖15所示。

圖 14
圖 15

3. 新建的storyboard當中為空剃袍,通常情況下黄刚,我們所建立的頁面當中都是包含UINavigationController的,所以我們要先拖一個NavigationController(也可以拖一個ViewController民效,當然要根據實際需求來了憔维,這里僅僅是以拖NavigationController為例)。如圖16所示畏邢。

圖 16

關于圖中所說的业扒,為什么要勾選is initial view controller選項呢? 根據字面意思舒萎,就是說:是否要把當前選中的Controller作為初始視圖控制器程储,因為storyboard當中將會有多個Controller,在系統(tǒng)加載的時候臂寝,肯定要指定一個初始控制器章鲤。

除此之外,還要為storyboard設置一個id以此來辨別不同的storyboard咆贬。如圖17所示败徊。

圖 17

4. 接下來再看拖出來的NavigationController的第二個Controller,他是一個一個帶有TableView的RootViewController掏缎,在很多情況下并不會符合我們的需求皱蹦,一個字,刪S恪(選中第二個Controller根欧,按delete刪除)刪除掉第二個Controller,再拖拉一個符合需求的Controller端蛆,并將其設置為RootViewController凤粗。這里以ViewController為例來說明了。如圖18所示。

圖 18

除此之外嫌拣,還要為RootViewController設置一個id來辨別柔袁。如圖19所示。

圖 19

5. 接下來在拖兩個ViewController VC1 和 VC 2异逐,并且在rootviewcontroller當中拖兩個button VC1 和 VC2捶索,點擊按鈕VC1跳轉到VC1界面,點擊按鈕VC2跳轉到VC2界面灰瞻。如圖20所示腥例。

圖 20

6. 全部設置好以后的效果圖如圖21所示。

圖 21

7. 全部設置完成以后酝润,就要能夠加載storyboard并展示在storyboard上的所有設置燎竖。如圖22所示為加載storyboard的代碼。

圖 22

以上的代碼我是寫在一個按鈕事件當中的要销,不是在程序啟動的時候就加載這個storyboard的构回。

關于storyboard的講述到此為止。

總結

以上就是關于xib和storyboard的部分使用介紹疏咐,在具體的項目當中可以視具體情況來選擇是使用xib還是storyboard纤掸。不論使用哪種方法進行開發(fā),最終的目的就是為了開發(fā)更方便浑塞,更快速借跪,更利于項目的后期維護和迭代更新。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末酌壕,一起剝皮案震驚了整個濱河市垦梆,隨后出現的幾起案子,更是在濱河造成了極大的恐慌仅孩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件印蓖,死亡現場離奇詭異辽慕,居然都是意外死亡,警方通過查閱死者的電腦和手機赦肃,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門溅蛉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人他宛,你說我怎么就攤上這事船侧。” “怎么了厅各?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵镜撩,是天一觀的道長。 經常有香客問我队塘,道長袁梗,這世上最難降的妖魔是什么宜鸯? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮遮怜,結果婚禮上淋袖,老公的妹妹穿的比我還像新娘。我一直安慰自己锯梁,他們只是感情好即碗,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陌凳,像睡著了一般剥懒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冯遂,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天蕊肥,我揣著相機與錄音,去河邊找鬼蛤肌。 笑死壁却,一個胖子當著我的面吹牛,可吹牛的內容都是我干的裸准。 我是一名探鬼主播展东,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼炒俱!你這毒婦竟也來了盐肃?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤权悟,失蹤者是張志新(化名)和其女友劉穎砸王,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體峦阁,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡谦铃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了榔昔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驹闰。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撒会,靈堂內的尸體忽然破棺而出嘹朗,到底是詐尸還是另有隱情,我是刑警寧澤诵肛,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布屹培,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏惫谤。R本人自食惡果不足惜壁顶,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溜歪。 院中可真熱鬧若专,春花似錦、人聲如沸蝴猪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽自阱。三九已至嚎莉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沛豌,已是汗流浹背趋箩。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留加派,地道東北人叫确。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像芍锦,于是被迫代替她去往敵國和親竹勉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容