需求一:我們製作APP的不可能一個界面來實現所有需求的,我們需要多個界面的跳轉。每個界面各自實現對應的需求,代碼實現多控制器之間的跳轉大致分為三類。一類是使用UINavigationController 跳轉 ,一類是使用UITabBarController 實現多個控制器之間的跳轉,還有一類是使用 ...
需求一:我們製作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即可。