標籤:
一、什麼是Segue
(1) Storyboard上每一根用來介面跳轉的線,都是一個UIStoryboardSegue對象(簡稱Segue)
二、Segue的屬性
(1) 每一個Segue對象,都有3個屬性
1) 唯一標識
@property (nonatomic, readonly) NSString *identifier;
2) 來源控制器
@property (nonatomic, readonly) id sourceViewController;
3) 目標控制器
@property (nonatomic, readonly) id destinationViewController;
三、Segue的類型
(1) 根據Segue的執行(跳轉)時刻,Segue可以分為2大類型
1) 自動型:點擊某個控制項後(比如按鈕),自動執行Segue,自動完成介面跳轉
2) 手動型:需要通過寫代碼手動執行Segue,才能完成介面跳轉
(2) 自動型Segue
1) 按住Control鍵,直接從控制項拖線到目標控制器
2) 點擊“登入”按鈕後,就會自動跳轉到右邊的控制器
3) 如果點擊某個控制項後,不需要做任何判斷,一定要跳轉到下一個介面,建議使用“自動型Segue”
(2) 手動型Segue
1) 按住Control鍵,從來源控制器拖線到目標控制器
2) 手動型的Segue需要設定一個標識(如)
3) 在恰當的時刻,使用perform方法執行對應的Segue
[self performSegueWithIdentifier:@"login2contacts" sender:nil];
// Segue必須由來源控制器來執行,也就是說,這個perform方法必須由來源控制器來調用
如果點擊某個控制項後,需要做一些判斷,也就是說:滿足一定條件後才跳轉到下一個介面,建議使用“手動型Segue”
(3) performSegueWithIdentifier:sender:
1) 利用performSegueWithIdentifier:方法可以執行某個Segue,完成介面跳轉
2) 接下來研究performSegueWithIdentifier:sender:方法的完整執行過程
[self performSegueWithIdentifier:@“login2contacts” sender:nil];
// 這個self是來源控制器
(4) 根據identifier去storyboard中找到對應的線,建立UIStoryboardSegue對象
1) 設定Segue對象的sourceViewController(來源控制器)
2) 建立並且設定Segue對象的destinationViewController(目標控制器)
(5) 調用sourceViewController的下面方法,做一些跳轉前的準備工作並且傳入建立好的Segue對象
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
// 這個sender是當初performSegueWithIdentifier:sender:中傳入的sender
(6) 調用Segue對象的- (void)perform;方法開始執行介面跳轉操作
1) 取得sourceViewController所在的UINavigationController
2) 調用UINavigationController的push方法將destinationViewController壓入棧中,完成跳轉
(7) Sender參數的傳遞
四、控制器的資料傳遞
(1) 控制器之間的資料傳遞主要有2種情況:順傳和逆傳
1) 順傳
控制器的跳轉方向: A à C
資料的傳遞方向 : A à C
資料的傳遞方式 : 在A的prepareForSegue:sender:方法中根據segue參數取得destinationViewController, 也就是控制器C, 直接給控制器C傳遞資料
(要在C的viewDidLoad方法中取得資料,來賦值給介面上的UI控制項)
逆傳
控制器的跳轉方向: A à C
資料的傳遞方向 : C à A
資料的傳遞方式 : 讓A成為C的代理, 在C中調用A的代理方法,通過代理方法的參數傳遞資料給
五、UITabBarController
(1) 跟UINavigationController類似,UITabBarController也可以輕鬆地管理多個控制器,輕鬆完成控制器之間的切換,典型例子就是QQ、等應用
iOS--小結系列八(繼續)