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. 要让CLR挂掉的话……

    http://rednaxelafx.iteye.com/blog/460893 (Disclaimer:如果需要转载请先与我联系. 作者:RednaxelaFX -> rednaxelafx. ...

  2. Python学习笔记(九)

    Python学习笔记(九): 装饰器(函数) 内置函数 1. 装饰器 1. 作用域 2. 高阶函数 3. 闭包 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就 ...

  3. Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程

    事前准备 最近给游戏添加了苹果的内购,这一块的东西也是刚刚做完,总结一下,其实这里不管是游戏还是我们普通的App添加内购这一块的东西都是差不多的,多出来的部分就是我们Lua和OC的交互的部分,以前刚开 ...

  4. 使用OpenCV训练Haar like+Adaboost分类器的常见问题

    <FAQ:OpenCV Haartraining>——使用OpenCV训练Haar like+Adaboost分类器的常见问题 最近使用OpenCV训练Haar like+Adaboost ...

  5. poj2635The Embarrassed Cryptographer(同余膜定理)

    The Embarrassed Cryptographer Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15069   A ...

  6. H - Pair: normal and paranormal URAL - 2019

    If you find yourself in Nevada at an abandoned nuclear range during Halloween time, you’ll become a  ...

  7. Oil Deposits

    Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground ...

  8. Problem X

    Problem Description Recently, iSea went to an ancient country. For such a long time, it was the most ...

  9. 第十一章 多GPU系统的CUDA C

    本章介绍了 显存和零拷贝内存的拷贝与计算对比 #include <stdio.h> #include "cuda_runtime.h" #include "d ...

  10. display:table 表格布局

    table 布局最大的特点 1.同行等高 2.宽度自动调节   那么table-cell是不是具备这个特点呢?答案是yes,为什么呢?css中有一个有意思的规则“创建匿名表格元素”.   拿table ...