你的位置:首页 > 操作系统

[操作系统][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即可。