[iOS開發]- 多控制器跳轉,ios開發控制器跳轉
需求一:我們製作APP的不可能一個介面來實現所有需求的,我們需要多個介面的跳轉。每個介面各自實現對應的需求,代碼實現多控制器之間的跳轉大致分為三類。一類是使用UINavigationController 跳轉 ,一類是使用UITabBarController 實現多個控制器之間的跳轉,還有一類是使用presentViewController( UIViewController, animated: animated
, completion:completion)實現跳轉。
1.UINavigationController :
實現跳轉:使用UINavigationController要注意的是要設定根控制器,之後的跳轉都是根據根控制器來完成跳轉。設定根控制器代碼如下:
// 設定根控制器
let nav = UINavigationController(rootViewController:ViewController())
*使用UINavigationController時使用push和pop來實現跳轉,代碼如下:
navigationController.pushViewController(目標控制器, animated: true/false)
navigationController.popToViewController(回退上一個控制器, true/false )
navigationController.popToRootViewControllerAnimated(true/false)
*注意push是跳轉到目標控制器,而pop是回退到上個控制器,popToRootView是直接回退根控制器。
*在使用UINavigationController跳轉時,UINavigationController會給所有目標控制器套上“導覽列”,完成push之後,會自動在“導覽列”上產生一個返回item,點擊返回item會執行pop方法返回到上一個控制器。
總結:使用UINavigationController跳轉時,UINavigationController的外觀只需要設定一次,之後派生的“導覽列”都會保持根控制器的外觀。設定外觀需要在initialize方法中設定外觀代理對象(appearance)來完成設定,注意的是initialize是類方法。
2.UITabBarController :
實現跳轉:使用UITabBarController注意的是,要同時把所有要跳轉的控制器都一次設定完成。UITabBarController的子控制器是同時存在的,在跳轉目標子控制器時不會釋放其他子控制器。設定子控器的方法大致分為兩種,一種是通過addChildViewController:ViewController 完成設定自控制器,這種方法每次只能設定一個子控制器。要設定多個子控器的時候可以使用viewControllers來設定多個子控制器,viewControllers 返回的是一個數組,使用時,建立完控制器,將控制器放入數組,然後直接賦值即可。需要注意的數組中的順序,就是tabBar展示控制器的順序,具體代碼如下:
1).使用addChildViewController
self.addChildViewController:ViewController1()
self.addChildViewController:ViewController2()
self.addChildViewController:ViewController3()
2).使用viewControllers
self.viewControllers = [ViewController1(),ViewController2(),ViewController3()]
*跳轉時,直接點擊“標籤欄”上的barButtonItem即可
3.presentViewController :
實現跳轉: 使用presentViewController可以跳轉任意控制器,但是在跳轉完成之後,如果要返回就要完成dismiss方法。presentViewController跳轉的特點是從螢幕下方推出直到覆蓋完整個螢幕,效果還是蠻好的,值得注意的是在完成dismiss方法之後,presentViewController會從記憶體釋放。具體代碼如下:
presentViewController(ViewController1() , animated: true/false , completion: nil)
* completion是完成跳轉之後執行的回調,我們一般填nil。
* 在跳轉完成一之後一定要首先寫dismiss方法
dismissViewControllerAnimated(true/false, completion:nil)
*這樣就完成了返回,同時該控制器也會從控制器中釋放。
總結:這樣完成了多個介面之間跳轉。
需求二:當然控制器之間的跳轉還可以使用sb,使用sb很簡單直接拖線show即可。