转自:hcios
1、创建并添加子控制器
- 自定义一个子控制器类,可以使用代码、XIB或者StoryBoard等方式
- 在父控制器类中,添加一个子控制器属性,注意:添加strong属性
- #import "SubViewController.h"
- @interface ViewController ()
-
- @property (nonatomic, strong) SubViewController *subVC;
-
- @end
- -(SubViewController *)subVC {
- if (_subVC == nil) {
- _subVC = [[SubViewController alloc] init];
- [self.view addSubview:_subVC.view];
- _subVC.delegate = self;
-
- }
- return _subVC;
- }
- 在需要创建子控制器的时候,添加子控制器,使用addChildViewController:方法
- - (void)viewDidLoad {
- [super viewDidLoad];
-
- [self addChildViewController:self.subVC];
-
- NSLog(@"childVCs: %ld",(unsigned long)self.childViewControllers.count);
-
- }
2、父子控制器之间的通信
父控制器和子控制之间一般需要建立通信机制,例如:当点击子控制器上的某个按钮时,通知父控制器跳转到一个新的控制器。父子控制器之间的通信方式可以采用如下两种方式:
3、子控制器管理
UIViewController类中,对于子控制器提供了一些管理方法,包括:添加子控制器,移除子控制器等,常用方法如下:
- @property(nonatomic,readonly) NSArray *childViewControllers NS_AVAILABLE_IOS(5_0);
- //存放所有子控制器的数组
-
- - (void)addChildViewController:(UIViewController *)childController NS_AVAILABLE_IOS(5_0);//添加子控制器
-
- - (void) removeFromParentViewController NS_AVAILABLE_IOS(5_0);//移除子控制器
勘误
视频中,添加了一个btn,这个btn的属性是weak型的,所以在懒加载时,我的懒加载代码不太准确,应该这样写比较合适。
- -(UIButton *)btn{
- if (_btn == nil) {
- UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
- btn.backgroundColor = [UIColor greenColor];
- btn.frame = CGRectMake(100, 100, 100, 100);
- [self.view addSubview:btn];
- [btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
-
- _btn = btn;
- }
- return _btn;
- }