iOS開發之Segue

Storyboard上每一根用來界面跳轉的線,都是一個UIStoryboardSegue對象(簡稱Segue)。ide

每個Segue對象,都有3個屬性:atom

(1)惟一標識代理

@property (nonatomic, readonly) NSString *identifier;orm

(2)來源控制器對象

@property (nonatomic, readonly) id sourceViewController;string

(3)目標控制器it

@property (nonatomic, readonly) id destinationViewController;io

獲取目標控制器就能夠調用目標控制器裏的方法,好比,能夠調用目標控制器的set方法給目標控制器傳遞參數。form

 

1Segue的類型登錄

根據Segue的執行(跳轉)時刻,Segue能夠分爲2大類型:

自動型:點擊某個控件後(好比按鈕),自動執行Segue,自動完成界面跳轉。

手動型:須要經過寫代碼手動執行Segue,才能完成界面跳轉。

2、自動型Segue

按住Control鍵,直接從控件拖線到目標控制器:

點擊「登陸」按鈕後,就會自動跳轉到右邊的控制器。

若是點擊某個控件後,不須要作任何判斷,必定要跳轉到下一個界面,建議使用「自動型Segue」。

3、手動型Segue

按住Control鍵,歷來源控制器拖線到目標控制器。

手動型的Segue須要設置一個標識(以下圖):

在恰當的時刻,使用perform方法執行對應的Segue(跳轉到目標控制器):

[self performSegueWithIdentifier:@"login2contacts" sender:nil];

// Segue必須由來源控制器來執行,也就是說,這個perform方法必須由來源控制器來調用。

若是點擊某個控件後,須要作一些判斷,也就是說:知足必定條件後才跳轉到下一個界面,建議使用「手動型Segue」。

4performSegueWithIdentifier:sender:

只要調用performSegueWithIdentifier:方法就能夠執行某個Segue,完成界面跳轉,即從一個界面跳到另外一個界面。

performSegueWithIdentifier:sender:方法的完整執行過程:

1)若是seguestylepush

[self performSegueWithIdentifier:@「login2contacts」 sender:nil];

// 這個self是來源控制器(左邊控制器)

第一步:

根據identifier去storyboard中找到對應的線,新建UIStoryboardSegue對象。

(a) 設置Segue對象的sourceViewController(來源控制器)。

(b)新建而且設置Segue對象的destinationViewController(目標控制器)。

第二步:

調用sourceViewController下面方法,作一些跳轉前的準備工做而且傳入建立好的Segue對象,通常用這個方法給下一個控制器傳遞數據。系統自動調用該方法。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

// 這個sender是當初performSegueWithIdentifier:sender:中傳入的sender

例如,給下一個控制器設置title:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    // 1.取得目標控制器(聯繫人列表控制器)

    UIViewController *contactVc = segue.destinationViewController;

    // 2.設置標題

    contactVc.title = [NSString stringWithFormat:@"%@的聯繫人列表", self.accountField.text];

    // contactVc.title 等價於 contactVc.navigationItem.title

//contactVc.navigationItem.title =

[NSString stringWithFormat:@"%@的聯繫人列表", self.accountField.text];

}

第三步:

調用Segue對象的- (void)perform;方法開始執行界面跳轉操做

(a)取得sourceViewController所在的UINavigationController

(b)調用UINavigationController的push方法將destinationViewController壓入棧中,完成跳轉。

2)若是seguestylemodal

調用sourceViewController的presentViewController方法將destinationViewController展現出來。

 

5Sender參數的傳遞

 

6、控制器的數據傳遞

控制器之間的數據傳遞主要有2種狀況:順傳和逆傳。

(1)順傳

n  控制器的跳轉方向: A à C

n  數據的傳遞方向: A à C

n  數據的傳遞方式:在A的prepareForSegue:sender:方法中根據segue參數取得destinationViewController, 也就是控制器C, 直接給控制器C傳遞數據

(要在C的viewDidLoad方法中取得數據,來賦值給界面上的UI控件)

 

(2)逆傳

n  控制器的跳轉方向: A à C

n  數據的傳遞方向: C à A

n  數據的傳遞方式:讓A成爲C的代理, 在C中調用A的代理方法,經過代理方法的參數傳遞數據給A

相關文章
相關標籤/搜索