UIView的AddChildViewCtroller的用法(4中页面切换方式)
UIView的AddChildViewCtroller的用法
———子控制器视图的切换
一.视图控制器的4种切换方式
1.使用presentViewController方法进行切换
适合于顺序型的页面转换,比如说某中验证(登录信息)型的,而且可以通过dismissViewController方便的回到父页面,默认动画从上而下。
2.使用pushViewController方法(前提是使用了导航控制器)
可以很方便的返回,层次感比较强,切换方式为左右,跳转到某个特定的控制器。
返回上一个页面调用popViewController
问题:在IB中生成含导航控制器的页面,代码中怎么对这个页面传输数据了?
答:可以通过获取到导航控制器,使用它的viewController属性和对应的下标可以得到相应控制器的对象,并可对它修改或赋值,跳转页面后有效。
3.使用addChildViewController方法
在没有导航控制器的情况下在多层次的视图页面中自由跳转,优点:
1.页面逻辑很清晰,相应的View对应相应的ViewController。
2.当某个子View没有显示时,将不会被Load,减少了内存的使用。
3.当内存紧张时,没有Load的View将被首先释放,优化了程序的内存释放机制。
4.一个页面中可以添加多个ViewController,并且可以在需要显示时才load它。
5.页面的切换方式可以在transitionViewController中选择(左右、上下、融化)
ios5后ViewController中新添加了下面几个方法。
addChildViewController:
removeFromParentViewController
transitionFromViewController:toViewController:duration:options:animations:completion: //切换页面显示调用
willMoveToParentViewController:
didMoveToParentViewController:
4.自定义。
二.使用AddChildViewcontroller切换视图(Object-C)
使用AddChildViewcontroller简单切换视图、可以运用到多分栏子页面切换(没有切换父控制器),以下只是简单使用AddChildViewcontroller,并没有明显切换过程,如果需要,可以自己添加按钮切换。
切换过渡代码段:
/// 切换子控制器///这种方式可以保证同一时刻只有一个subController///- parameter old : 之前的控制器///- parameter new : 之后的控制器///- warning : 传入的参数必须有共同的父容器控制器。且不能传入父容器控制器(建议制作容器,不要做View显示操作。)fileprivate func transition(old: UIViewController, new:UIViewController) -> Void {self.transition(from: old, to: new, duration: 0.1, options: .curveEaseIn, animations: {//过渡操作}) { (isFinish) inif isFinish{self.currentViewController = new //currentViewController 自定义新添加的。}else {self.currentViewController = old}}}
示例代码:
import UIKitclass ViewController: UIViewController { //这里的Controller 建议只做容器Controller 不做界面显示var vc1: UIViewController!var vc2: UIViewController!var currentViewController : UIViewController!override func viewDidLoad() {super.viewDidLoad()initConrollers()currentViewController = self}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}//MARK: -private method///初始化和调整Controller///建议使用for循环和数组处理func initConrollers() -> Void {vc1 = self.storyboard?.instantiateViewController(withIdentifier: String(describing: SencondViewController.self))vc1.view.frame = CGRect(origin: CGPoint.init(x: 0, y: 40), size: vc1.view.bounds.size) //调整下frame 以显示顶部的label选项卡self.addChildViewController(vc1!)vc1.didMove(toParentViewController: self) //建议调用该方法vc2 = self.storyboard?.instantiateViewController(withIdentifier: String(describing: ThirdViewController.self))vc2.view.frame = CGRect(origin: CGPoint.init(x: 0, y: 40), size: vc2.view.bounds.size)self.addChildViewController(vc2!)vc2.didMove(toParentViewController: self)self.view.addSubview(vc1.view) //显示某个控制器下的View【第一个要显示的View】//}//MARK: -IBAction@IBAction func toViewController1ButtonTap(_ sender: UIButton, forEvent event: UIEvent) {self.transition(old: vc2, new: vc1)
// vc2.view.removeFromSuperview()
// self.view.addSubview(vc1.view)}@IBAction func toViewController2ButtonTap(_ sender: UIButton) {self.transition(old: vc1, new: vc2)
// vc1.view.removeFromSuperview()
// self.view.addSubview(vc2.view)//如果使用这个切花Veiw 记得先移除,不然就会有两层,建议是哟并transitionxxxxxxx}/// 切换子控制器///这种方式可以保证同一时刻只有一个subController///- parameter old : 之前的控制器///- parameter new : 之后的控制器///- warning : 传入的参数必须有共同的父容器控制器。且不能传入父容器控制器(建议制作容器,不要做View显示操作。)fileprivate func transition(old: UIViewController, new:UIViewController) -> Void {self.transition(from: old, to: new, duration: 0.1, options: .curveEaseIn, animations: {//过渡操作}) { (isFinish) inif isFinish{self.currentViewController = new //currentViewController 自定义新添加的。}else {self.currentViewController = old}}}
}
效果展示:
UIView的AddChildViewCtroller的用法(4中页面切换方式)相关推荐
- 【uniapp】uniapp中页面传值方式总结
1.传递一个或多个参数 在跳转页面的路由后添加"?"后开始写自己需要传递的参数名,如代码中的buyId,由于这里是使用 ` ,即反引号,所以使用${}作占位符,而不需要字符串拼接, ...
- QTabWidget——创建标签页的多页面切换
QTabWidget 用来分页显示 重要函数: 1.void setTabText(int, QString); //设置页面的名字. 2.void setTabToolTip(QString); / ...
- 【转】ASP.NET中页面传值
http://www.cnblogs.com/wenly/archive/2008/06/10/1216678.html 一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交, & ...
- html对话框跳转页面,html5各种页面切换效果和模态对话框用法总结
这篇文章主要为大家介绍了html5各种页面切换效果和模态对话框用法总结,较为详细的介绍了HTML5的各种页面元素的使用技巧,非常具有实用价值,需要的朋友可以参考下 本文详细总结了html5各种页面切换 ...
- java attributes用法_C#中的Attributes的用法
今天研究了一下C#中的Attributes的用法,感觉很有用,现总结以下: 在前台用JS写的脚本方法,除了可以直接用在前台控件的属性中,还可以在后台运用. 即在后台页面加载时,调用JS方法.语法格式有 ...
- oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法
savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...
- html页面判断其他div为空,将外部html加载到div中 - 页面加载然后变为空白
我确信这将会变成一件愚蠢的事情,但是自从我成为JavaScript noob以来,这里就变成了一件愚蠢的事情.将外部html加载到div中 - 页面加载然后变为空白 我想外部HTML内容加载到我的索引 ...
- 设计点击左侧切换页面进出_Axure教程:(初级)导航中的页面切换
本文给大家讲讲如何利用Axure进行导航中的页面切换,一起来看看~ 一.页面布局 (1)从左侧元件库拉入两个矩形作为导航按钮,分别命名为:页面1.页面2. (2)从左侧元件库拉入一个动态面板作为页面内 ...
- Vue 单文件组件||Vue 单文件组件的基本用法||webpack 中配置 vue 组件的加载器|| 在 webpack 项目中使用 vue
Vue 单文件组件 传统组件的问题和解决方案 1. 问题 1. 全局定义的组件必须保证组件的名称不重复 2. 字符串模板缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \ 3. 不支持 CS ...
最新文章
- BusinessObject Port 配置
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
- 当退出python时是否释放全部内存_python如何释放内存
- 纯后台生成highcharts图片有哪些方法?
- windows 开启telnet 功能
- Qt文档阅读笔记-Object Model初步解析
- 使用Postman对Restful接口进行测试
- 一个核心系统 3 万多行代码的重构之旅
- Spark in action on Kubernetes - 存储篇(一)
- itellij jdk多重选择Class JavaLaunchHelper is implemented in both
- 计算机无法读光盘,win10系统无法读取光盘如何解决 win10系统读取光盘失败的解决方法...
- 确定有限自动机DFA和非确定有限自动机NFA
- OpenGL第二讲——绘制简单的几何图形
- vim的安装以及基础使用方法;
- 使用for循环打印空心菱形图案
- 小程序中maring-top、maring-left、maring-right、maring-bottom失效/没有用的原因及解决方案
- 遇到数据库隔离性问题(读已提交和可重复读、可重复读导致调息前后两次查询数据一样)
- 微型计算机室内太干燥,暖气屋里太干燥怎么办 七种方法增加室内湿度
- Python股票监控机器人,加强版!
- PPT设置自动保存时间 mac_如何一键把Word转换为PPT?
热门文章
- 请用状态转换图描述一个绘制折线的对话过程_CAD画一个元器件电路符号(AD)...
- Vue -- 配合iView实现省市二级联动
- python基础训练题2-元组,字典
- [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版
- FZU 2159 WuYou
- Java-第三章-使用if选择结构实现,如果年龄够7岁或5岁并且是男,可以搬桌子
- iOS使用多线程提高数据并发访问 之七
- wordpress给后台文章列表增加自定义排序栏
- day16-小数据池
- JavaScript实现放大镜功能