关于创建Custom Container View Controller
在我们现实的项目中,很多刚入行的工程师可能不会很在意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相关推荐
- Container View Controller
有时候,我们的Controler中包含有另一个controler view的view时,可以使用这种方式. https://developer.apple.com/library/ios/featur ...
- 官方文档链接(Core Graphics、View Controller、UICollectionView、UITableView、第三方库)
Core Graphics Quartz 2D Programming Guide Core Graphics (Framework) Drawing(UIKit).Images and PDF(UI ...
- 0306--iOS之阅读View Controller Programming Guide for iOS---(三)Presentations and Trasitions
Presenting a View Controller --显示vc There are two wa ...
- 创建一个Table View
在本课程中,您将创建应用程序FoodTracker的主屏幕.您将创建第二个,表视图为主场景,列出了用户的菜谱.你会设计定制表格单元格显示每一个菜谱,它是这样的: 学习目标 在课程结束时,你将能够: 创 ...
- 关于Page翻页效果--Page View Controller
Page View Controllers 你使用一个page view controller用page by page的方式来展示内容.一个page view controller管理一个self- ...
- 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 ...
- 打造轻量化的View Controller
2019独角兽企业重金招聘Python工程师标准>>> 本文由破船译自objc 小引 很早以前就看到了这篇文章,该文是Lighter View Controllers中比较重要的一篇 ...
- SAP UI5 视图控制器 View Controller 的生命周期方法 - Lifecycle methods
SAPUI5 View Controller lifecycle methods Create an Application Project for SAPUI5 打开 Eclipse 并转到菜单选项 ...
- MVC(Model View Controller)框架
MVC框架 同义词 MVC一般指MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一 ...
最新文章
- 线程池之CachedThreadPool学习
- C语言手撸搜索(查找)二叉树---创建,插入,删除
- 为什么要娶就娶电力女?!
- Scikit_Learn介绍及演练
- Anaconda3+PyTorch安装教程
- 拉丁超立方试验设计_南水北调工程通水 六年惠及超1.2亿人
- 产品原型设计5:移动App原型设计神器 - POP(Prototyping on Paper)
- vue上传图片文件到服务器,vue如何将quill图片上传到服务器
- 四川信息职业技术学院2019考纲复习
- 关于Arrays.asList()方法的使用
- 机器学习基础概念(三):归纳与演绎
- deepfool简单实现
- chipsel语言_英语快速记忆法视频
- 【图】图的一般表示法以及其他表示法转化为一般表示法
- 【MySql】MySQL排序分页查询数据顺序错乱的原因和解决办法
- C语言的fopen()函数
- LaTeX入门教程|自定义论文标题
- Python paramiko 模块详解与SSH主要功能模拟
- QDateTime相关格式
- GPS 有源天线无源天线