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. Javaweb配置最全的数据源配置

    DBCP DBCP是Apache推出的数据库连接池(Database Connection Pool). 操作步骤: 添加jar包: commons-dbcp-1.4.jar commons-pool ...

  2. ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)

    本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...

  3. Visual Studio中让一个JS文件智能提示另一个JS文件中的成员

    当一个Web页面引用了两个JS文件(假如分别叫common.js和JScript1.js),如果JScript1.js中需要调用大量的common.js中的方法,这时候在JScript1.js中智能提 ...

  4. Linux系统挂载操作mount详解

    在Linux系统中,文件系统不挂载是无法使用的.挂载,即是让文件系统在操作系统中可用.在Linux中使用mount命令来挂载文件系统,有永久性挂载和临时性挂载两种挂载方式. 1. 永久性挂载: 修改配 ...

  5. LeetCode 605. Can Place Flowers (可以种花)

    Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, ...

  6. 找到python官方标准库文档

    python中有很多标准库.我们没法记住全部标准库,但是可以在:https://docs.python.org/3/py-modindex.html 中查看标准库的索引 在python的官方文档中,如 ...

  7. swift 之 mustache模板引擎

    用法: Variable Tags {{name}} 用来渲染值name datas: let data = ["value": "test"] ------- ...

  8. Ubuntu下OpenGL开发环境的搭建

    由于上了计算机图形学的课,老师叫我们安装OpenGL开发环境,晚上安装了一两个小时,终于搞定了. 1.      建立基本编译环境 sudo apt-get install build-essenti ...

  9. 隐藏input的光标

    https://segmentfault.com/q/1010000000684888 https://wap.didialift.com/beatles/campaign/driver/activi ...

  10. HTML5 Geolocation API工作原理[转载]

    大家都知道,HTML5 Geolocation 可以使用 IP 地址.基于 Web 的数据库.无线网络连接和三角测量或 GPS 技术来确定经度和纬度. 问题: 在一个基于地理位置服务的个人业余项目(小 ...