摘要: java
在iOS的開發過程當中,不可避免的要設計界面,在android中有xml設置界面和直接使用java代碼設置界面控件兩種方式,在以前的ios開發中也是相似的有xib文件設置界面及用代碼直接設置控件兩種方法,但後來又出了一種方式,就是storyboard故事板子,其實storyboard和xib文件很像,最大的不一樣之處在於一個xib文件對應一個ViewController視圖控制器,而storyboard對應多個,基本一個應用只須要一個storyboard就能夠了,再也不須要爲每一個控制器建立一個xib文件,從這點上來講,仍是很方便的,在storyboard中查看各個界面的跳轉也很方便,但以前一直使用xib進行開發,對storyboard的使用不太熟悉,今天好好學習了一下其中的界面跳轉和傳值,用到了Segue這個東西,這裏藉着例子說明一下。 android
首先建立一個新的工程,這裏我建立的是Single View Application,就能夠自帶故事板了,以下圖: ios
建立好後能夠在左邊文件列表中看到Main.stroyboard,這個就是故事板文件了,由於這裏要實現界面跳轉,只有自帶的一個ViewController不夠,咱們再建立一個,command+N鍵建立一個Cocoa Touch Class。 git
如今文件都建立好了,目錄以下: github
咱們選擇Main.storyboard,開始建立視圖和控件。 app
原始的storyboard中只有一個自帶的視圖,咱們從右下角在拖一個View Controller上來,如圖: ide
新版的Xcode建立的視圖會是一個大方型的,要改爲正常手機界面大小的haunted,選擇視圖上方的view controller按鈕,在右側第四個部分中把size設成想要的便可: 學習
如今咱們來爲視圖添加控件,考慮到咱們的需求,要能辨認當下在哪一個界面,要能夠在兩個界面跳轉,要能夠設置和顯示要傳遞的值,那麼咱們須要一個標題欄,一個按鈕和一個用於編輯和顯示的編輯框,從右下方分別拖出Navigation Bar、Button、Text Field放在合適的位置,兩個視圖控制器都要放,如圖: 動畫
至此,準備工做,基本作完了,接下來就是使用Segue了。
要在故事板中使用Segue跳轉,很是的簡單和方便,把鼠標移到第一個視圖的按鈕上,按住鼠標右鍵不放,拖動鼠標到第二個視圖,鬆開,而後會出現一個選項框,這裏是要選擇Segue的模式,咱們選擇最下面的modal,會在兩個視圖中出現一個箭頭,表示能夠跳轉到第二個視圖了,就是這麼簡單,如今運行模擬器跑工程,點擊第一個視圖的按鈕已經能夠跳轉了,是否是很簡單!
剛纔說到選擇modal,Segue有幾種模式,在iPhone上能夠用到的有modal、push和custom,其餘還有幾種是iPad上用的,這裏簡單說明一下:
一、modal:模態地加載視圖控制器,最經常使用的方式,相似present和dismiss;
二、push:使用導航欄壓進新的視圖控制器,相似push和pop,要使用這個模式,跳轉的源視圖,也就是這裏的Page1必須是Navigation Controller,這裏咱們不是,因此選擇的話運行起來會報錯;
三、custom:用戶自定義。
如今咱們選擇兩個視圖控制器中間的箭頭線條,右邊查看第四個部分,能夠看到能夠選擇一些Segue的屬性:
一、Identifier:能夠定義Segue的標識,若是一個源視圖有不少跳轉到其餘視圖的Segue,就能夠靠這個標識來判斷究竟是哪一個Segue,後面代碼裏再說明,這裏咱們只有一個跳轉因此先不寫;
二、Segue:能夠選擇Segue的模式,好比剛纔的modal、push等等;
若是模式是modal,還有以下選項,其餘的模式選項不一樣:
三、Presentation:還沒搞清楚,求大神指教;
四、Transition:跳轉界面的方式(Cover Vertical:水平上移切換;Filp Horizontal:從右到左翻轉;Cross Dissolve:閃現;Partial Curl:從下往上翻頁),能夠都試一試。
要從Page2跳回到Page1,可不能像上面同樣再拉一個Segue回到Page1的視圖,這樣在跳轉的過程當中,跳一次添加一個新視圖,跳一次添加一個新視圖,原來的視圖都沒有消去,會一直累加的,並非回到Page1.
正確的作法是使用dismissViewControllerAnimated: completion:方法來跳回界面。在Page2的視圖控制器中,把按鈕關聯到Page2ViewController中去,而後編輯按鈕的響應方法:
咱們在兩個視圖中都添加了TextField編輯輸入框,這樣咱們能夠在Page1的頁面中輸入數據來傳遞到Page2顯示,一樣的能夠在Page2中輸入數據回到Page1顯示。首先要作的,仍是把兩個輸入框關聯到各自的視圖控制器中去。
咱們傳值有兩種方式,正好在兩個傳輸過程當中使用,先看第一個方法,實現從Page1傳值到Page2:
咱們先在Page2中定義一個變量用來接收所傳遞的值:
PS:上面曾經說到過Segue的屬性裏有一個Identifier,就是在這個方法中用來判斷是哪一個Segue在起做用,如:
如今講第二種方法,從Page2傳回Page1,用協議delegate,關於協議的具體用法能夠查找相關資料,這裏直接講怎麼使用,簡單的直接實現:
首先在Page2的.h文件中,聲明協議和協議方法,以及採用協議的物件:
實現協議的方法,設定修改輸入框內容爲傳回來的值:
這樣就能夠實現Page2往Page1的傳值了,運行看看吧~
這裏有個人工程源碼:https://github.com/Cloudox/SegueTest
轉載請註明出處,謝謝
參考資料:
segue分析小結:http://mikixiyou.iteye.com/blog/1745995
使用Storyboard Segue 實做 UIViewController的切換:http://blog.csdn.net/mazhen1986/article/details/7791430