iOS开发技术分享iOS#iOS#HeminWon

iOS开发中常用的视图切换

2016-12-09  本文已影响170人  码农冰冰
想一步一步的留个脚印*想一步一步的留个脚印*

今天又是周五了一天天的过得好快,这句总是情不自禁的感叹!下面给大家分享下视图的切换,其实这是我们的基本功,只是有时候面试了或者同事交流的时候感觉回答的不够系统,全面。
我们常见的视图切换有人说三种,有人说四种,我就把平时用到的都总结下:

UIViewController、UINavigationController, UITabBarController之间的关系

UIViewController 是所有控制器的基类,UINavigationController, UITabBarController 都是直接或间接继承自UIViewController. 只是它们在UIVIewController的基础上又扩展了自己的实现。
UINavigationController: 导航控制器, 它是一个容器控制器,自身实现了它包含的所有子控制器之间的转场。 pushViewController(压栈) ,popViewController(出栈)。可见导航控制器,它维护了一个控制器栈,控制器之间的关系也符合栈的特点“后进先出”。 UITabBarController: 标签控制器, 它也是一个容器控制器,以平行的方式管理视图。

常见的视图切换

UINavigationController 以栈的方式管理视图,各个视图的切换就是压栈和出栈操作,出栈后的视图会立即销毁,默认显示一个根控制器,根控制器是不会被销毁的,这个根视图必须指定,通过根控制器导航到其他下一级子视图。在子视图中可以通过navigationController访问导航控制器,同时可以通过navigationController的childViewControllers获得当前栈中所有的子视图(注意每一个出栈的子视图都会被销毁)。UINavigationController导航是通过上方导航栏进行的,每个放到UINavigationController栈中的子视图都会显示一个导航栏,可以通过子控制器(包括根控制器) 的navigationItem访问这个导航栏,修改其左右两边的按钮内容。

UITabBarController以平行的方式管理视图,各个视图之间往往关系并不大,每个加入到UITabBarController的视图都会进行初始化即使当前不显示在界面上,相对比较占用内存。是Apple专门为了利用页签切换视图而设计的,在这个视图控制器中有一个UITabBar控件,用户通过点击tabBar进行视图切换。我们知道在UIViewController内部有一个视图,一旦创建了UIViewController之后默认就会显示这个视图,但是UITabBarController本身并不会显示任何视图,如果要显示视图则必须设置其viewControllers属性(它默认显示viewControllers[0])。这个属性是一个数组,它维护了所有UITabBarController的子视图。为了尽可能减少视图之间的耦合,所有的UITabBarController的子视图的相关标题、图标等信息均由子视图自己控制,UITabBarController仅仅作为一个容器存在。

self.window.rootViewController=viewController; //从一个界面弹到另一个界面,直接设置根视图   
[self presentViewController:ViewController animated:YES completion:nil]; //跳转到ViewController所在视图
[self dismissModalViewControllerAnimated:YES]; //退出当前视图
[self.view addSubview: ViewController.View]; //实现复杂界面的时候常用

切换制图控制器方式之间优点和缺点

比较的项目 push、pop modal 切换窗口的根控制器 添加子视图 UITabBarController
销毁资源
使用场合 有导航控制器,需要能够返回前一个视图的情况 没有导航控制器的跳转,能返回前一个视图 版本新特性或者不需要保留前一个控制器的情况 需要实现复杂界面的情况 与导航控制器结合使用
是否有导航控制器 一般与导航控制器结合使用
上一篇下一篇

猜你喜欢

热点阅读