iOS中,父子类控制的使用方法
来源:互联网 发布:java计算运行时间 编辑:程序博客网 时间:2024/05/07 14:56
首先为什么我们要去使用父子控制器?
- 有的应用中tabBarController已经满足不了界面的需求.
- 有的应用也许在tabBarController上显示的是首页
- 但是首页却又参杂了许许多多的页面(比如视频,音频,图片,文字)
- 这时候我们就需要在一个控制器里面在放入一个控制器。来显示首页参杂的许许多多的页面(比如视频,音频,图片,文字)。
下面是实现父子控制器的代码,可以供大家参考。。
#import "ViewController.h"#import "ScoietyViewController.h"#import "HotViewController.h"#import "TopLineViewController.h"/* 父子控制器:多控制器管理:导航控制器,UITabBarController 默认UITabBarController,实现这种效果,父子实战 永远只会显示一个view,把之前的view移除 UITabBarController有个专门存放子控制器view,占位视图思想,1.不用去考虑子控制器的view尺寸 2.屏幕适配也不用管理 实现: 1.添加所有子控制器:addChildViewController 2.设置对应按钮的内容,按钮内容由对应子控制器: NSInteger count = self.titleContainView.subviews.count; for (int i = 0; i < count; i++) { UIButton *btn = self.titleContainView.subviews[i]; UIViewController *vc = self.childViewControllers[i]; [btn setTitle:vc.title forState:UIControlStateNormal]; } 3:添加子控制器的view:1:先移除当前添加的view 2:再添加新的view,设置frame 方法:1:可以属性定义一个currentView,来记录当前的view,也可以直接遍历子控件数组,调用数组的方法:[self.containView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];来实现view的移除操作。再添加新的view的时候,从子控制器数组根据index取出当前点击的控制器,将其view添加到父控制器的view上。 4:1:当一些业务逻辑比较复杂的时候,就将此业务逻辑交给控制器来处理,当两个view互为父子关系的时候,他们的控制器也最好为父子关系 ,当两个控制器互为父子关系后,实现push或是diss等方法的时候,在子控制器中实现点击方法,系统会首先判断子控制器能否实现,有没有当前的导航控制器或是是否是当前modal出来的控制器,如果不是,就会向其父类中查找,直到找不到父类为止 ,找到父类后,父类就会实现相应的方法(push diss例子) ,互为父子关系的时候,则其就会有一个强引用,将子控制器会被存放到子控制器数组中,子控制器和view都会被强引用。 2:makeObjectsPerformSelector,数组的方法,遍历数组每个元素去执行某个方法。 3:常用的就是从子控件数组或是从子控制器的数组中根据index取出子控件或是子控制器的,可以调用get方法取出设置的子控件或是子控件view的值去给其他赋值,或是移除currentView,再添加新的view,设置新view的frame */@interface ViewController ()@property (weak, nonatomic) IBOutlet UIView *titleContainView;@property (weak, nonatomic) IBOutlet UIView *containView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 1.添加所有的子控制器 [self setupAllViewController]; // 2.设置按钮的内容 [self setupTitleButton];}// 设置按钮的内容- (void)setupTitleButton{ NSInteger count = self.titleContainView.subviews.count; for (int i = 0; i < count; i++) { UIButton *btn = self.titleContainView.subviews[i]; UIViewController *vc = self.childViewControllers[i]; [btn setTitle:vc.title forState:UIControlStateNormal]; }}// 添加所有的子控制器- (void)setupAllViewController{ // 社会 ScoietyViewController *scoietyVc = [[ScoietyViewController alloc] init]; scoietyVc.title = @"社会"; [self addChildViewController:scoietyVc]; // 头条 TopLineViewController *topLineVc = [[TopLineViewController alloc] init]; topLineVc.title = @"头条"; [self addChildViewController:topLineVc]; // 热点 HotViewController *hotVc = [[HotViewController alloc] init]; hotVc.title = @"热点"; [self addChildViewController:hotVc]; }// 点击标题按钮- (IBAction)showChildVcView:(UIButton *)sender { // 移除之前控制器的view [self.containView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];// for (UIView *vcView in self.containView.subviews) {// [vcView removeFromSuperview];// } // 把对应子控制器的view添加上去 UIViewController *vc = self.childViewControllers[sender.tag]; vc.view.backgroundColor = sender.backgroundColor; vc.view.frame = self.containView.bounds; [self.containView addSubview:vc.view];}@end
0 0
- iOS中,父子类控制的使用方法
- 五、JAVA中类的探究-父子实例的内存控制
- Iframe框架中父子窗体的互相控制
- 父子实例的内存控制
- IOS中delegate的使用方法
- IOS中CGAffineTransform的使用方法
- iOS中NSPredicate的使用方法
- iOS中segue 的使用方法
- iOS中UIAlertView的使用方法
- iOS中GCD的使用方法
- Java父子继承实例的内存控制
- js 控制父子页面的加载顺序
- C++中父子类中指针的步长问题
- iOS-非父子控制器跳转(如:从某一导航控制器的子页面跳转到另一个tabbar控制的页面)
- python中类的创建,父子类的继承
- IOS中UITextView控件的一些使用方法
- iOS中正则表达式的一种使用方法
- iOS中UIWebView的科学使用方法总结
- android 自定义view实现太极图效果
- eclipse 查看变量或方法被调用的快捷键
- ZABBIX实践(一) 服务端部署和安装
- 最大路径和 I
- 手机--三星S6edge的几个致命问题
- iOS中,父子类控制的使用方法
- 加密和解密工具
- Java 字符串转成 JsonArray 并遍历
- Android 6.0 权限请求问题
- 【JAVA基础】本地持久化的非数据库方式:properties
- 微服务模式系列之七:自注册
- RecyclerView简单使用之自定义RecyclerView分割线
- 杂文
- 【NOIP2010】洛谷1158 导弹拦截