在我们现实的项目中,很多刚入行的工程师可能不会很在意controller的设计概念,因为接到的项目有限,而且多数公司的项目架构已经由主程开发好了,所以能接触到的只不过是一些功能模块,这对一个程序员的发展是很不利的,功能熟知的再多,也不过是龙套角色,因为再强大的功能在度娘,谷歌,github等面前都是浮云。那么我今天要写的这篇博客就是简单的介绍一下关于自定义ContainerViewController。

  我们首先看一下苹果对于ContainerViewController的官方解释 A container view controller contains content owned by other view controllers.也就是说一个ContainerViewController的主要功能是负责管理其他子controller的,比如UINavigationController,UITabBarController等。这些controller都是负责管理我们的controller的,既然我们对ContainerViewController有了一点概念,那我们先看一下效果图。

  正常而言如果我们设计三个界面,我们会选择用A->B->C这个模式,这样如果我们想从A->C的时候这样实现起来就相对复杂一点,管理三个controller就如此复杂,更何况一个项目动辄几十个controller管理,那我们有什么好的设计方式呢?答案其实就在UINavigationController这个苹果自己给的ContainerViewController里。

  首先我们创建一个CoustomContainerViewController用于管理这三个子controller,这样我们不仅降低了各个controller之间的耦合性,而且还可以通过这个CoustomContainerViewController对所有的controller进行管理。废话不多说,先上代码:

BaseViewController *firstVC                  = \

[[firstClass alloc]initWithNibName:name.firstViewController bundle:nil];

firstVC.delegate = self;

[self addChildViewController:firstVC];

firstVC.view.frame = self.view.frame;

[self.view addSubview:firstVC.view];

[firstVC didMoveToParentViewController:self];

_currentVC = firstVC;

  这里我用到了一个面向对象的多态性,创建一个BaseViewController的抽象类,随后创建三个子类实现父类方法。我们将初始化好的firstVC添加到这个CoustomContainerViewController中,然后进行管理。这个时候我们遇到一个问题,如果我想让firstVC上button的点击方法在当前的controller里执行需要怎么做?当然这里面我用的是代理的设计模式。

@protocol SelectViewControllerDelegate <NSObject>

-(void)selectOtherViewController:(id)obj viewName:(NSString *)name;

@end

  创建一个.h文件,在里面写上这个代理方法。在BaseViewController这个抽象类里声明实例变量以及属性,这样,当他的子类继承的时候,便可以直接使用这个,具体的实现方式这里就不多说了。

  然后我们在CoustomContainerViewController里实现这个代理方法:

-(void)selectOtherViewController:(id)obj viewName:(NSString *)name

{

//    ViewControllerName *name    = [ViewControllerName copySelfAllProperty];

Class secondClass            = NSClassFromString(name);

BaseViewController *secondVC                  = \

[[secondClass alloc]initWithNibName:name bundle:nil];

secondVC.delegate = self;

[self addChildViewController:secondVC];

secondVC.view.frame = self.view.frame;

[self.view addSubview:secondVC.view];

[secondVC willMoveToParentViewController:self];

[self transitionFromViewController:_currentVC toViewController:secondVC duration:1 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{

} completion:^(BOOL finished) {

NSLog(@"controllers = %@",self.childViewControllers);

[_currentVC.view removeFromSuperview];

[_currentVC removeFromParentViewController];

_currentVC = secondVC;

}];

}

  当我们点击的时候便执行这个方法,让当前的主CoustomContainerViewController也将这个移除。其实我今天说的只是一个笼统的概念,具体的说明我会在日后的博客中继续完善,希望我们可以一同进步。

转载于:https://www.cnblogs.com/xuruofan/p/4170082.html

关于创建Custom Container View Controller相关推荐

  1. Container View Controller

    有时候,我们的Controler中包含有另一个controler view的view时,可以使用这种方式. https://developer.apple.com/library/ios/featur ...

  2. 官方文档链接(Core Graphics、View Controller、UICollectionView、UITableView、第三方库)

    Core Graphics Quartz 2D Programming Guide Core Graphics (Framework) Drawing(UIKit).Images and PDF(UI ...

  3. 0306--iOS之阅读View Controller Programming Guide for iOS---(三)Presentations and Trasitions

    Presenting a View Controller                                                 --显示vc There are two wa ...

  4. 创建一个Table View

    在本课程中,您将创建应用程序FoodTracker的主屏幕.您将创建第二个,表视图为主场景,列出了用户的菜谱.你会设计定制表格单元格显示每一个菜谱,它是这样的: 学习目标 在课程结束时,你将能够: 创 ...

  5. 关于Page翻页效果--Page View Controller

    Page View Controllers 你使用一个page view controller用page by page的方式来展示内容.一个page view controller管理一个self- ...

  6. View Controller Programming Guide for iOS---(七)---Resizing the View Controller’s Views

    Resizing the View Controller's Views A view controller owns its own view and manages the view's cont ...

  7. 打造轻量化的View Controller

    2019独角兽企业重金招聘Python工程师标准>>> 本文由破船译自objc 小引 很早以前就看到了这篇文章,该文是Lighter View Controllers中比较重要的一篇 ...

  8. SAP UI5 视图控制器 View Controller 的生命周期方法 - Lifecycle methods

    SAPUI5 View Controller lifecycle methods Create an Application Project for SAPUI5 打开 Eclipse 并转到菜单选项 ...

  9. MVC(Model View Controller)框架

    MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...

最新文章

  1. 线程池之CachedThreadPool学习
  2. C语言手撸搜索(查找)二叉树---创建,插入,删除
  3. 为什么要娶就娶电力女?!
  4. Scikit_Learn介绍及演练
  5. Anaconda3+PyTorch安装教程
  6. 拉丁超立方试验设计_南水北调工程通水 六年惠及超1.2亿人
  7. 产品原型设计5:移动App原型设计神器 - POP(Prototyping on Paper)
  8. vue上传图片文件到服务器,vue如何将quill图片上传到服务器
  9. 四川信息职业技术学院2019考纲复习
  10. 关于Arrays.asList()方法的使用
  11. 机器学习基础概念(三):归纳与演绎
  12. deepfool简单实现
  13. chipsel语言_英语快速记忆法视频
  14. 【图】图的一般表示法以及其他表示法转化为一般表示法
  15. 【MySql】MySQL排序分页查询数据顺序错乱的原因和解决办法
  16. C语言的fopen()函数
  17. LaTeX入门教程|自定义论文标题
  18. Python paramiko 模块详解与SSH主要功能模拟
  19. QDateTime相关格式
  20. GPS 有源天线无源天线

热门文章

  1. 《偷梁换柱》全世界最最简单对付SMSS。EXE病毒的方法,可能也是对付某类流氓程序的好方法...
  2. 武汉大专计算机专业分数线,武汉专科大学有哪些 2019武汉专科大学排名及分数线...
  3. healpy的安装(包括healpix)
  4. python 拓扑排序正确版
  5. 牛客华为机试第2题python
  6. 利用人脑神经突触进行网络模型剪枝
  7. Https单向认证和双向认证介绍
  8. jq判断滚动条向上还是向下
  9. Citrix XenServer 关键配置文件
  10. 使用webpack打包的后,公共请求路径的配置问题