iOS-UIViewController視圖控制器跳轉介面的幾種常用方法

來源:互聯網
上載者:User

標籤:

 

 

一、最普通的視圖控制器UIViewContoller

  一個普通的視圖控制器一般只有模態跳轉的功能(ipad我不瞭解除外,這裡只說iPhone),這個方法是所有視圖控制器對象都可以用的,而實現這種功能,有兩種方法。

  1、通過方法 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion跳轉

  相信很多人都用過這個方法,他是所有視圖控制器對象都有的成員方法。基本絕大部分情況下,這個成員方法都可以正常使用,不過有些時候可能會使用 失敗,失敗一般的原因都是,同一個視圖控制器,在同一個時間,只能present一個另外的視圖控制器,如果當前的VC已經present了,再次 present一個VC時,就會提示失敗,具體的失敗提示在log裡面有,我忘了就不說了,如果想繼續present,就必須將原來present的控制 器dismiss。

  說到這裡,再延伸下控制器的兩個可能很多人都沒注意的兩個唯讀屬性:presentedViewController和 presentingViewController,他們分別是被present的控制器和正在presenting的控制器。比如說, 控制器A和B,[A presentViewController B animated:YES completion:nil]; 那麼A相對於B就是presentingViewController,B相對於A是presentedViewController,即這個時候  

    B.presentingViewController = A;

    A.presentedViewController = B;

  這兩個屬性,在有些時候,用起來是很方便的。比如說,現在有個C介面,C介面被顯示出來,可能有兩種情況,一是modal出來的,另外一種是 push出來的,這時候就可以通過當前介面對象的presentingViewController屬性來判斷到底屬於哪種情況,如果是nil,表示是 UINavigationController對象push過來的,如果不是則是modal過來的。

 

  2、通過方法 - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender跳轉

    如果代碼要用這種方式,首先要建立一個UIStoryboardSegue對象,並給初始化相應的值。UIStoryboardSegue類有哪些方法和屬性,去看看官方文檔就明白了,我這裡就不多說了。

    UIStoryboardSegue對象,提供了 跳轉源介面,跳轉目的介面,以及一個identifier也就是上面的identifier了,相信這麼一說大家就知道這個類是幹嘛的了。

    不過我沒用代碼這麼寫過,一般用這種方法跳轉,我都是在storyboard裡面直接根據所給的identifier來寫的,也就是我們在storyboard中不同介面間拉的線(也就是UIStoryboardSegue)的屬性中寫的。

    這種方法同時也支援UINavigationController的跳轉,不過跳轉的模式為push了,它只能在當前視圖控制器是UINavigationController時才能用。

 

  上述兩種方式,都是通過 dismissViewControllerAnimated 來返回前一個介面的。

 

 

 

二、導航控制器UINavigationController

  1、pushViewController    推出某個視圖控制器

  需要注意的是,這個方法,是UINavigationController 和其子類才有的方法,普通的控制器是沒有的。 所以用得時候一般是某個aNavigationController pushViewcontroller或者self.navigationController pushViewController。

  2.通過上面所述的performSegueWithIdentifier方法跳轉,就不多說了。

    

  由於UINavigationController是一個視圖控制器的容器,他裡面可能放了很多個控制器,所以返回的時候可以分為幾種情況。

  A:彈出當前顯示的介面,也就是返回到上個介面, popViewController(注意,噹噹前介面是根結面時,這個方法是不起作用的)。

  B:返回到控制器的根結面,popToRootViewController。

  C:跳轉到這個視圖控制器的中間的某個介面。popToViewController。 用這種方式,就需要知道跳轉到哪個介面了,擷取需要跳轉的介面的方式有很多,我一般是遍曆UINavigationController的 viewControllers數組,用iskindofclass方法來擷取某個控制器對象再來跳轉的。

 

 

三、UITabBarController

  tabbar控制器,相信大家也用的很多,一般作為app的根介面視圖控制器。其實與其說UITabBarController的介面跳轉,不 如說是介面切換,因為UITabBarController的介面跳轉其實就是UITabBarController的viewControllers數 組中的幾個介面切換。只要設定好了UITabBarController的viewControllers數組,切面的切換基本就沒我們什麼事兒了。

 

四、補充一點 :通過子介面實現同個控制器下的介面切換。

  我們開發中,可能會遇到某個介面比較複雜,要進行多個介面的切換,如果把這些介面切換全都放在該介面中,控制器代碼非常臃腫不說,控制起來也比 較麻煩,這個時候我建議用不同的控制器來表示不同的介面,然後將這些介面通過addChildViewController添加到控制器的子控制器中,然 後通過系統提供的方法進行切換,至於這種方法怎麼用,大家看下官方文檔就知道了。

  這種方法通常會和UISegmentController配合使用。

iOS-UIViewController視圖控制器跳轉介面的幾種常用方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.