您的位置:首页 > 移动开发 > Objective-C

第02天实战技术(14):父子控制器(完善)

2017-03-26 00:00 260 查看
#####一、父子控制器(完善)<采用方式:使用懒加载>

解决上一次的三个问题
1.控制器每次都需要创建
2.控制器的view每次都添加上去
3.控制器不能处理业务逻辑,控制器被销毁

采用方式:使用懒加载

但是
自始自终 都没有使用过父子控制器去实现


1.控制器
不能处理业务逻辑
,控制器
被销毁
(因为控制器
没有强引用
,所以才会被销毁,
view
因为
父控制器
的view添``加到
一个
数组
里面
有强引用
,所以
view不会销毁`)

code

#import "ViewController.h"
#import "SocietyViewController.h"   // 社会
#import "TopLineViewController.h"   // 头条
#import "HotViewController.h"       // 焦点
/*
父子控制器 : 多控制器管理, 导航控制器,UITabBarController
默认UITabBarController , 实现这种效果,父子实战
*/

@interface ViewController ()

// 定义属性 这样控制器就会有强引用了
// @property(nonatomic)  默认是strong
@property(nonatomic) SocietyViewController *sVC;
@property(nonatomic) TopLineViewController *tlVC;
@property(nonatomic) HotViewController *hVC;

@end

@implementation ViewController
/*
存在的问题:
1.控制器每次都需要创建
2.控制器的view每次都添加上去
3.控制器不能处理业务逻辑,控制器被销毁

自始自终 都没有使用过父子控制器去实现
*/

- (void)viewDidLoad {
[super viewDidLoad];
}

- (IBAction)clickSociety:(UIButton *)sender {
// view 和 viewController
// 为什么view在,viewController不在
// 只要没有强引用 就会被销毁

// 把社会的控制器的view 添加进去

// 懒加载 只创建1遍
if (_sVC == nil) {
SocietyViewController *sVC = [[SocietyViewController alloc]init];
sVC.view.backgroundColor = [sender backgroundColor];
sVC.view.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height-64); // 设置frame是为了:防止控制器的view 挡住头部内容
_sVC = sVC; // 赋值给全局变量
}

// 每次都要添加到上面
// addSubview 把一个view加上去,先判断这个view有没有父控件
// 如果有, 会拿到这个view,先从父控件移除,再添加
[self.view addSubview:_sVC.view];

}
- (IBAction)clickTopLine:(UIButton *)sender {
if (_tlVC == nil) {
TopLineViewController *tlVC = [[TopLineViewController alloc]init];
tlVC.view.backgroundColor = [sender backgroundColor];
tlVC.view.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height-64);
_tlVC = tlVC; // 赋值给全局变量
}

[self.view addSubview:_tlVC.view];

}
- (IBAction)clickHot:(UIButton *)sender {

if (_hVC == nil) {
HotViewController *hVC = [[HotViewController alloc]init];
hVC.view.backgroundColor = [sender backgroundColor];
hVC.view.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height-64);
_hVC = hVC; // 赋值给全局变量

}
[self.view addSubview:_hVC.view];
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Objective-C