十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本文使用的軟件版本:
IOS:6.1
XCode:4.6
Storyboard(故事板)是XCode4.2才開始支持的,為了使設(shè)計(jì)View更容易。盡管用以前的nib(xib)拖拖拽拽也沒問題,不過卻需要 在各種文件之間來回切換,對(duì)于初學(xué)者很容易崩潰。Storyboard在這方面改進(jìn)了不少,基本上只要在storyboard界面就可以完成一切,尤其是 View導(dǎo)航,可以不編寫一行代碼就可以搞定。盡管storyboard在實(shí)現(xiàn)View導(dǎo)航方面要比xib更容易使用,不過對(duì)于初學(xué)者來說仍然有一些難 度,因此本文及后面幾篇文章會(huì)詳細(xì)介紹如何使用storyboard實(shí)現(xiàn)各種類型的導(dǎo)航。
本文會(huì)介紹一種最簡單的導(dǎo)航方式,也就是單擊當(dāng)前View的一個(gè)Button,會(huì)跳到另外一個(gè)View上,并且向這個(gè)View傳遞數(shù)據(jù)。
首先在XCode中建立一個(gè)“SingleView Application”類型工程,主要要選擇“Use Storyboard”和“Use Automatic Reference Counting”,這樣就可以使用ARC了,也會(huì)自動(dòng)建立一個(gè)storyboard。工程名是StoryboardDemo1。
接下來再建立一個(gè)Objective-CClass,類名為MyViewController,注意Superclass為 UIViewController,并且下面兩個(gè)復(fù)選框都不要選中,因?yàn)檫@里不需要XIB文件。如果按著這些步驟做,最后StoryboardDemo1 工程的目錄結(jié)構(gòu)如圖1所示。
圖1
接下來要做的是打開MainStoryboard.storyboard文件,會(huì)看到界面上有一個(gè)默認(rèn)的View。這是根視圖,也就是說程序運(yùn)行會(huì)首先要 顯示該視圖。由于本文的目的是實(shí)現(xiàn)導(dǎo)航,而IOS規(guī)定所有參與導(dǎo)航的視圖必須由UINavigationController控制。所以還需要在 storyboard上加一個(gè)UINavigationController,并且程序的入口由View變成了 UINavigationController。完成這項(xiàng)工作的方法很多,先來看一個(gè)超級(jí)無敵簡單的方法,就是選中storyboard默認(rèn)的View, 然后點(diǎn)擊“Editor”>“Embed In”>“Navigation Controller”菜單項(xiàng),XCode就會(huì)自動(dòng)在storyboard上生成一個(gè)UINavigationController,并更改啟動(dòng)入口。最 終storyboard的效果如圖2所示。
圖2
除了這種簡單的方法,還可以直接從控件面板上拖一個(gè)UINavigationController控件,不過默認(rèn)這個(gè)控件還帶了一個(gè) UITableViewController。這個(gè)東西并不需要,所以可以刪除UITableViewController。然后選中 storyboard中的UINavigationController,并按住ctrl鍵,然后拖動(dòng)鼠標(biāo)到默認(rèn)視圖上,這時(shí)會(huì)彈出一個(gè)菜單,選擇最下面 的“root view controller”,最后的效果與圖2完全一樣。當(dāng)然,為了顯示自己有極客范,也可以在storyboard上放一個(gè) UINavigationController控件后,進(jìn)入storyboard的源代碼文件(xml格式的文件),找到默認(rèn)視圖的聲明代碼,其實(shí)也很好 找,只要設(shè)置了默認(rèn)視圖導(dǎo)航條的標(biāo)題,就會(huì)在這段代碼的頂端出現(xiàn)一行注釋,如圖3所示。我們要找的就是
圖3
接下來尋找導(dǎo)航條(UINavigationControlle)的聲明代碼,也可以根據(jù)自動(dòng)生成的注釋,如圖4所示。
圖4
我們只關(guān)心
接下來雙擊默認(rèn)視圖上面的導(dǎo)航條,輸入標(biāo)題文本“首頁”,并在默認(rèn)視圖上放置一個(gè)Button,Title為“顯示新視圖”。
下面在storyboard上再放一個(gè)ViewController,并且在View上放置一個(gè)UITextField控件(可以放任何控件,這里只是為了演示方便),
盡管多個(gè)View會(huì)放到一個(gè)storyboard中,但不同的View會(huì)使用不同的源代碼文件,在前面已經(jīng)建了一個(gè)MyViewController類, 所以這個(gè)新的View會(huì)使用MyViewController類。然后需要將這個(gè)View與MyViewController類關(guān)聯(lián)。選擇 ViewController,在右側(cè)面板中選擇第3個(gè)按鈕,設(shè)置MyViewController,如圖5所示。
圖5
接下來為UITextField在MyViewController.h文件中設(shè)置Outlet(名為textField,用于引用該控件)。
現(xiàn)在選擇默認(rèn)視圖上的button,然后按住ctrl鍵,拖動(dòng)鼠標(biāo)到新放置的視圖(上面有UITextField控件的視圖),會(huì)彈出一個(gè)菜單,選中“push”,其他的選項(xiàng)不能用于這種導(dǎo)航方式。
到現(xiàn)在為止,storyboard上共有一個(gè)導(dǎo)航控制器和兩個(gè)視圖控制器,連接關(guān)系如圖6所示。
圖6
現(xiàn)在就可以運(yùn)行程序了,然后點(diǎn)擊“顯示新視圖”按鈕,就可以切換到新視圖,并且在新視圖左上角會(huì)顯示一個(gè)導(dǎo)航按鈕,點(diǎn)擊會(huì)返回“首頁”視圖。
還有一個(gè)問題,如何在兩個(gè)視圖直接傳遞數(shù)據(jù)呢?當(dāng)然可以用全局變量或靜態(tài)變量,不過這些方式有些不妥(全局和靜態(tài)變量用多了不是什么好事)。
這里介紹一種通過prepareForSegue:方法傳遞數(shù)據(jù)的方法,由于默認(rèn)視圖對(duì)應(yīng)的源代碼文件是ViewController.m,所以在該文件中實(shí)現(xiàn)prepareForSegue:方法,代碼如下:
- -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- View
- "李寧"
當(dāng)導(dǎo)航到MyViewController之前(已經(jīng)創(chuàng)建了MyViewController對(duì)象,但還沒調(diào)用 MyViewController.viewDidLoad方法)系統(tǒng)會(huì)調(diào)用prepareForSegue:方法。并且可以通過 [seguedestinationViewController]方法獲取目標(biāo)視圖的對(duì)象,并調(diào)用視圖對(duì)象中的方法設(shè)置任何的參數(shù)值。這里在 MyViewController.m中實(shí)現(xiàn)了setText方法,用于設(shè)置mText變量,然后在 MyViewController.viewDidLoad方法中通過mText變量值設(shè)置UITextField控件的顯示文本。
除了可以通過[seguedestinationViewController]方法判斷目標(biāo)視圖外,還可以使用下面的代碼。
- -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- "myview"
- "李寧"
其中segue.identifier表示導(dǎo)航連接的標(biāo)識(shí),也就是單擊圖6中新視圖和默認(rèn)視圖直接連線中間的圓圈后,在右側(cè)的Identifier文本框的值,如圖7所示。
圖7
現(xiàn)在運(yùn)行程序,當(dāng)導(dǎo)航到新視圖后UITextField控件中的文本就會(huì)變成“李寧”了。
源代碼下載
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。