1. 程式人生 > >好吧,我承認我喜歡這種多個 StoryBoard 組織的方式,學習了!

好吧,我承認我喜歡這種多個 StoryBoard 組織的方式,學習了!

又一 mat ted tableview right sel 例如 簡單的 簡單





下面轉載內容非常不錯。興許補充從官方文檔疏理出來的脈絡,確實非常好的使用方法。




tid-270505.html">

tid-270505.html">Storyboard 跳轉 和 傳值

寫在前面:

由於蘋果推 Storyboard 並且 眼下來看, Apple Watch 也是用 Storyboard 就知道, 明天應用預計都是 Storyboard 的天下了.

(水平有限, 不正確之處在所難免, 望海涵)

非常多人似乎還是在用 XIB, 對 Storyboard 怎樣進行跳轉 似乎 懵懵懂懂...

好吧, 鑒於 早上群裏, 有人問 怎麽跳轉, 怎麽傳值 等等問題. 就做下總結, 同一時候為大家 提供一些方法和參考.

------------------

1. 最簡單的方法


拖拽, 這個就不用多解釋了吧. 直接拖拽到還有一個視圖控制器, 選擇 show, 即可了.

2. 利用 Segue 方法 (這裏主要是 方法1 的傳值)

連好線, 點擊 連線中間部分, 設置 Identifier.

然後 調用 performSegueWithIdentifier 方法.

(註: Demo 裏面, 是直接將 TableViewController 和 SecondViewController 進行連線, 而不是 點擊 Cell 的 indicator 進行連線)

運行下面 方法, 就能夠進行 跳轉操作了.

復制代碼
  1. performSegueWithIdentifier("SecondSegue", sender: self)


怎樣傳值?



非常easy, 須要調用 prepareForSegue 方法 (由於這裏是 父視圖 -> 子視圖 傳值, 所以要用 destinationViewController)

復制代碼
  1. override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  2. var theSegue = segue.destinationViewController as SecondViewController
  3. theSegue.text = "Pass"
  4. }


(註: 這裏, Swift 的 自己主動補全可能失效, 所以 假設沒有出現 destinationViewController, 沒關系往後打.)

這裏的 text 是我在 子視圖中 聲明的變量, 用來設置 Label 的 值.

PS:
一般, 我們都用使用連線的方式, 這裏告訴大家還有一個方式, 就是用 viewWithTag. 我先前在 Label 控件 Tag 中設置為 100.

當然你也能夠使用連線, 使用 viewWithTag 能夠在我們自己定義 Cell 的時候 方便用到, 而不須要創建單獨的 Cell class.

3. 利用 self.storyboard

利用 self.storyboard 方法, 就不須要進行 連線, 一樣能夠進行視圖之間的跳轉. 可是必須要設置 Storyboard ID.

然後利用 例如以下方法進行 跳轉 和 傳值

復制代碼
  1. var thirdVC = self.storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as ThirdViewController
  2. thirdVC.text = "Pass"
  3. self.navigationController?.pushViewController(thirdVC, animated: true)


由於是在 同一個 Storyboard 裏面進行跳轉, 所以 self.storyboard 就能夠滿足需求.

不明確?

看最後一個方法:

4. 利用 UIStoryboard

XIB 方法, 我們須要 用到 nibName, 相同 假設我們想要 分離多個 sence 在不同的Storyboard 裏面, 怎麽辦?



這個時候, 就不能使用 self.storyboard 了.

而是:

復制代碼
  1. var storyboard = UIStoryboard(name: "New", bundle: nil)
  2. var newVC = storyboard.instantiateViewControllerWithIdentifier("NewViewController") as NewViewController
  3. newVC.text = "Pass"
  4. self.navigationController?.pushViewController(newVC, animated: true)


是不是 和 XIB 有異曲同工的感覺, 這樣就能夠把 Storyboard 分幾個, 每一個裏面放幾個 Sence.

這種優點就是, 當你須要做多個不同功能的模塊的應用, 分離到不同的 Storyboard 中, 彼此互不影響.

相對於 XIB 來說, 每一個目錄 僅僅須要 1 個 Storyboard 文件, 和 Swfit 文件就能夠了.

[ 此帖被dongeyoung在2014-11-23 04:55又一次編輯 ]




好吧,我承認我喜歡這種多個 StoryBoard 組織的方式,學習了!