這里介紹的使用純代碼方式實現(xiàn) UIViewController 代碼實現(xiàn)界面跳轉(zhuǎn)的方式,是在不區(qū)分任何情況下,包括使用 StoryBoard 構(gòu)建了界面,代碼創(chuàng)建了ViewController;最后實現(xiàn)的是在代碼中調(diào)用ViewController實現(xiàn)界面的相應(yīng)跳轉(zhuǎn)。
其中跳轉(zhuǎn)中的難點包括:從代碼創(chuàng)建的 ViewControllers 跳轉(zhuǎn)到 SB 搭建的可視化界面中,通過代碼跳轉(zhuǎn)到 UITabBarViewController 創(chuàng)建的幾個tabBar形成的界面,ViewController 在 UINavigationController 控制器中跳轉(zhuǎn)。
- 普通視圖控制器UIViewController
一個普通的視圖控制器一般只有 "模態(tài)跳轉(zhuǎn)" 的功能,這個方法是所有視圖控制器對象都可以用的,而實現(xiàn)這種功能,有以下兩種方法:
1.通過方法 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion 跳轉(zhuǎn)
這是所有視圖控制器對象都有的成員方法,大部分情況下這個成員方法都是可以使用的。
有的時候會使用失敗,是因為同一個視圖控制器,在同一個時間,只能present一個另外的視圖控制器,如果當前的VC已經(jīng)present了,再次present另一個VC時,就會提示失敗。如果需要繼續(xù)present則需要將原來present控制器dismiss。
2.通過方法 - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender跳轉(zhuǎn)
如果代碼要用這種方式,首先要創(chuàng)建一個UIStoryboardSegue對象,并給初始化相應(yīng)的值。UIStoryboardSegue對象,提供了跳轉(zhuǎn)源界面,跳轉(zhuǎn)目的界面,以及一個identifier即參數(shù)identifier
以上兩種方法都可實現(xiàn)使用 self在當前的ViewController控制器中實現(xiàn)直接調(diào)用。
[self presentViewController:nextVC];
[self performSegueIdentifier:nextId sender:nil];
- 帶有
UINavigationController導(dǎo)航控制器
- 帶有
1、pushViewController 讓某個ViewControllers視圖控制器實現(xiàn) “入?!?需要注意的是,這個方法,是UINavigationController和其子類才有的方法,普通的控制器是沒有的。 所以用得時候一般使用
[self.navigationController pushViewController:nextNaviVC animated:nil]。
2.通過上面所述的performSegueWithIdentifier方法跳轉(zhuǎn),就不多說了。
由于UINavigationController是一個視圖控制器的容器,他里面可能放了很多個控制器,所以返回的時候可以分為幾種情況。
A:彈出當前顯示的界面,也就是返回到上個界面, popViewController(注意,當當前界面是根控制器時,這個方法是不起作用的)。
B:返回到控制器的根VC,popToRootViewController。
C:跳轉(zhuǎn)到這個視圖控制器的中間的某個界面。popToViewController。用這種方式時,就需要知道跳轉(zhuǎn)到哪個界面了,獲取需要跳轉(zhuǎn)的界面的方式有很多;
一般可以使用遍歷UINavigationController的viewControllers數(shù)組,用iskindofclass方法來獲取某個控制器對象再來跳轉(zhuǎn)的。
- UITabBarController
tabbar控制器,相信大家也用的很多,一般作為app的根界面視圖控制器。其實與其說UITabBarController的界面跳轉(zhuǎn),不如說是界面切換,因為 UITabBarController 的界面跳轉(zhuǎn)其實就是 UITabBarController 的 viewControllers 數(shù)組中的幾個界面切換。只要設(shè)置好 UITabBarController的viewControllers數(shù)組。
有點如果整個最初的 ViewController 界面框架使用 UITabBarController 在 SB 中搭建的,則在實現(xiàn)某個控制器中想要實現(xiàn)某個按鈕或者某項功能是可以出發(fā)tabBar界面功能可以使用:
可直接在當前需要實現(xiàn)此功能的控制器中調(diào)用此方法:
self.tabBarController.selectedIndex = xx (xx<= tabBar.count)
實現(xiàn)跳轉(zhuǎn)到某個界面中去
- 視圖控制器的兩個只讀屬性
presentedViewController 和 presentingViewController
這兩個屬性分別是被present的控制器和正在present的控制器
eg:控制器A和控制器B
[A presentViewController:B animated:YES completion:nil]
則A相對于B就是presentingViewController,B相對于A就是presentedViewController
則:B.presentingViewController=A;
A.presentedViewController=B;
在一般使用中,如:
現(xiàn)在有個C界面,C界面被顯示出來,可能有兩種情況,一是modal出來的,另外一種是push出來的。
這時候就可以通過當前界面對象的presentingViewController屬性來判斷到底屬于哪種情況,如果是nil,表示是UINavigationController對象push過來的,如果不是則是modal過來的。