[ SWIFT ] - Segue介紹 - 畫面切換 - func prepareForSegue - ViewController資料傳遞,func shouldPerformSegueWithIdentifier - 傳遞前檢查

Segue 介紹

說明:Segue負責頁面場景的轉換,另外當你想將view controller中相關資料傳遞給新的view controller時也可透過Segue進行值的傳遞!

Segue建立方式:
點選ViewController圖示後拖拉至另一個ViewController,即會出現Manual Segue和Non-Adaptive Manual Segue畫面。
 建立Segue畫面(下圖為show):
另外點選Show Document Outline也可以看到建立的Segue

Segue種類:(因為不同設備螢幕顯示限制,所以在iphone與ipad中的segue類型是不同的)
Storyboard中的Segue主要分為:push,modal,popover,replace和custom
而在iphone和ipad中的segue的類型是不同的。
例如:在iphone中,segue有:push,modal,和custom三種不同的類型。
       而在ipad中,有push,modal,popover,replace和custom五種不同的類型。
(1)Modal 類型
說明: 
最常用的轉換方式,轉換時新的場景會直接完全覆蓋舊的場景,當場景交換後便無法再與上一個場景交互,除非關閉目前的場景。

Modalview:
說明:
以彈出方式切換view,當view切換後便無法與前一個 view互動,需先關閉目前的view。
Modal View對應的segue type就是modal segue。

(3)Push類型
說明:
需要與Navigation Controller配合使用,呈現由左至右的拖拉頁面切換效果。

(4)popover 類型(限iPad only)
說明:
以POP方式呈現新頁面。
*Popover(iPad only):Displays the scene in a pop-up “window” over top of the current view.


(5)Replace (iPad only):
 說明:
替換當前scene。
Replace the current scene with another. This is used in some specialized iPad viewcontrollers (e.g. split-view controller).


(6)custom:
說明:
自定義跳轉方式。
*Custom:Used for programming a customtransition between scenes.
在Storyboard中使用自定義的segue類型
http://go.rritw.com/ryan.easymorse.com/?p=72


参考資料:

使用StoryBoard:用Segue傳遞數據
http://go.rritw.com/www.cnblogs.com/mybkn/archive/2012/03/22/2411842.html 

WWDC2011視頻之Introduction to Storyboarding摘要
http://go.rritw.com/blog.sina.com.cn/s/blog_834f346f0100s4jr.html

storyboard 遇到一個segue的問題
http://go.rritw.com/www.cocoachina.com/bbs/simple/?t92552.html

iOS: storyboard (2)

http://go.rritw.com/blog.csdn.net/totogogo/article/details/7361191


原文內容:Your view controller overrides this method when it needs to pass relevant data to the new view controller. The segue object describes the transition and includes references to both view controllers involved in the segue.

Segue的傳值方式:

所有的Segue在進行view切換時都會導向prepareForSegue,因此必需要有一個分辯Segue的東西,也就是segue.identifier。

在Storyboard上的每一條Segue我們都要設一個identifier,在導入到prepareForSegue前就靠identifier區分 segue,如此程式中便可以區分不同的segue要如何進行前置設定,例如:popover segue 的箭頭位置等 。

重要觀念:在controllerview中所有的連結都是透過名稱!

說明:當再view上點擊按鈕進行畫面轉換時,如果需要傳值,便可透過prepareForSegue這個方法將值傳給下一個 view

SWIFT 格式:
func prepareForSegue(_ segue: UIStoryboardSegue, sender sender: a href="" AnyObject /a ?)


shouldPerformSegueWithIdentifier(剛創建的segue需要的準備設定內容):
說明:Segue進行畫面切換前檢查設定的作業是否已完成(例如下載的圖片、設定哪些按鈕不可用等),如果未完成則不可切換畫面,回傳false or true。

SWIFT 格式:
func shouldPerformSegueWithIdentifier(_ identifier: String?, sender sender: a href="" AnyObject /a ?) -> a href="" Bool




※ 在stanford課程中有提到幾個重要觀念如下:

(a)segue在切換畫面時,每個畫面都是重新產生,因此如果畫面切換時有需要傳遞資料可以利用NSUserDefaults!s
Ex: private let defaults = NSUserDefaults.standardUserDefaults()


(b)sub-MVCs介紹:
說明:透過viewCntriller的屬性可以查詢目前的Controller是誰!


segue是透過identifier來區分

 下圖有一個非常重要的重點:當segue創建時,他的outlet還沒被設定!!隱性options!有可能會造成程式異常!

(c)Popover介紹: 

說明:popover segue和其他segue不同,因為其他segue都是整個畫面切換,但popover segued可以允許各種預設值設定,例如:透過CGSize設定呈現的大小,或指定箭頭位置,要出現在左邊或右邊等。

(c.1)popover segue在iphone上會以全螢幕model的方式呈現
※如果要讓iphone上同ipad一樣呈現popover時,需設定UIModalPresentationStyle.None



(c.2)popover segue不屬於viewcontroller而是屬於popoverPresentationController,因此可以透過popoverPresentationController判別是不是popover segue!!

(d)插入Navigation Controller的方法
說明:要讓ViewController可以出現標題列或標題列按鈕時,就需要在原本的viewcontroller前插入 Navigation Controller。
注意:插入Navigation Controller後原本設定在segue中的檢查也需要同步調整,由原本的viewController改為Navigation Controller!!






留言

熱門文章