iOS开发 关于addChildViewController的理解

前言

我之前是做Android开发的接触ios开发不到一个月的时间,所以在有些东理解上会不自觉的向Android方向靠拢。

理解

通过查阅文档以及相关的博客发现addChildViewController跟我们在 Android 接触的 Fragment 很相似。

好处

我们都知道 iOS 开发默认走的模式是 MVC 模式,当然现在还有一些 MVVM MVP 等等模式,但这些模式都是从 MVC 延伸出去的,MVC 是他们的基础。

举个例子如果我们需要在 界面上添加一个比较复杂的 View 并且这个 View 还涉及到其他的业务逻辑处理。如果我们直接通过 View 的方式添加到A 界面上,你有两种方案去处理这个 View 的交互逻辑。

  1. A 界面处理业务逻辑
  2. 在 View 里面处理业务逻辑

这两种方案的弊端都很明显,第一种会造成 Controller 非常臃肿,也不利于后面开发者的观看。第二种虽然不会减轻 Controller 的逻辑,但是你把业务逻辑写到 View 里面去不太合适,这很符合 MVC 模式。所以addChildViewController这个方法可以完美解决上述问题,你只需要建一个 新的Controller ,然后业务逻辑写到新的 Controller 里面。

在 Android 开发中 Fragment 也有类似的效果,有甚至整个 App 都是用 Fragment 完成的,Activity 只是个载体。

用法

addChildViewController:是UIViewController的一个方法,用起来还是很简单的

addChildViewController和addSubView同时出现

 let childVc = OtherViewController()
addChildViewController(childVc)
self.view.addSubview(childVc.view)

设置子视图的位置

childVc.view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)

移除 ChildController

childVc.removeFromParentViewController()

视图切换(如果同时添加了2个 childController)

  /**
* from 显示在父视图控制器中的子视图控制器
* to 将要显示的姿势图控制器
* duration 动画时间
* options 动画效果(渐变,从下往上等等,具体查看API)
* animations 转换过程中得动画
* completion 转换完成闭包
*/
self.transition(from: FirstViewController(), to: SecondViewController(), duration: 5, options: UIViewAnimationOptions.curveEaseInOut, animations: nil, completion: nil)

这里面很多参数自己可以调整下试试,动画有很多个,当然也可以自己实现自己的动画。

总结

其实看到这里你就可以去很简单的去实现一个类似网易新闻那种签栏视图切换功能了,就类似我们 Android 里面的 viewpager 里面嵌套 Fragmengt 的实现方法一样。我们可以用 UICollectionView 嵌套ChildViewContrller 来实现类似的效果。

iOS开发 关于addChildViewController的理解的更多相关文章

  1. ***iOS开发中@selector的理解与应用

    @selector 是什么? 1一种类型 SEL2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString() / NSSelectorFromStri ...

  2. iOS开发中@selector的理解

    @selector 是什么? 1一种类型 SEL2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString() / NSSelectorFromStri ...

  3. ios开发static关键字的理解

    :static关键字修饰局部变量::当static关键字修饰局部变量时,该局部变量只会初始化一次,在系统中只有一份内存 :static关键字不可以改变局部变量的作用域,但是可延长局部变量的生命周期,该 ...

  4. 深入理解iOS开发中的BitCode功能

    前言 做iOS开发的朋友们都知道,目前最新的Xcode7,新建项目默认就打开了bitcode设置.而且大部分开发者都被这个突如其来的bitcode功能给坑过导致项目编译失败,而这些因为bitcode而 ...

  5. iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)

    Dispatch Group在追加到Dispatch Queue中的多个任务处理完毕之后想执行结束处理,这种需求会经常出现.如果只是使用一个Serial Dispatch Queue(串行队列)时,只 ...

  6. 【转】 iOS开发之打包上传到App Store——(一)各种证书的理解

    OK,有日子没写iOS开发的相关文章啦,主要是最近的精力都没在这上面,不过既然产品已经快要出来了,就有必要了解一下各种证书啥的(众所周知iOS的一堆证书可是很让人头大呀),最近确实被这个搞得头大,然后 ...

  7. 深入理解 iOS 开发中的锁

    来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...

  8. iOS开发:深入理解GCD 第一篇

    最近把其他书籍都放下了,主要是在研究GCD.如果是为了工作,以我以前所学的GCD.NSOperation等知识已经足够用了,但学习并不仅仅知识满足于用它,要知其然.并且知其所以然,这样才可以不断的提高 ...

  9. 0112.1——iOS开发之理解iOS中的MVC设计模式

    模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...

随机推荐

  1. JS中OOP之模拟封装和继承和this指向详解

    大家好,今天我带大家学习一下js的OOP, 大家都知道,面向对象有三个基本特征,继承,封装和多态,面向对象的语言有那么几种,C++,PHP,JAVA等,而功能强大的JS可以模拟实现面向对象的两大特征, ...

  2. 解析 .Net Core 注入 (3) 创建对象

    回顾 通过前两节的学习,我们知道 IServiceCollection 以元数据(ServiceDescriptor)的形式存放着用户注册的服务,它的 IServiceCollection 的拓展方法 ...

  3. aapt不是内部命令

    解决方法:在E:\sdk\build-tools\目录下的任意文件夹下查找aapt,复制到E:\sdk\platform-tools,具体盘符是情况而定,如果还不行,尝试配置环境变量!

  4. mysql服务处理流程

    先把错误日志定位 就是找的错误日志 然后必要的时候 重新启动服务器 排除其他的干扰 把错误日志 挪到旧文件 清空错误日志 然后试着启动 看干净的错误日志 然后 问题就解决了

  5. 一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务

    这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来. 本访问层需要通过Nuget安装EntityFramework Core,不过个人认为EF 6同样可以使用. 搭配数据库,最好是 ...

  6. mongodb集群【】

    参考 http://www.jianshu.com/p/2825a66d6aed http://www.cnblogs.com/huangxincheng/archive/2012/03/07/238 ...

  7. addEventListener 的事件函数的传递【转载】

    addEventListener 参数如下: addEventListener(type, listener[, useCapture]); type,事件名称 listener,事件处理器 useC ...

  8. 机器翻译评测——BLEU改进后的NIST算法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7765345.html 上一节介绍了BLEU算的缺陷.NIS ...

  9. HTTP中的Range: bytes=0-

    HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传.Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的 表示第二个 ...

  10. Oracle - java创建Oracle 的触发器

    Oracle - java创建Oracle 的触发器 今天碰到这个问题,遇到点问题,到这来 总结一下解决的办法, 需求,为一个用户当中的表增加一个自动增长列,我还没有学Oracle 的这部分,只是简单 ...