UIViewController介绍:5-控制器嵌套

来源:互联网 发布:数据分析员发展前景 编辑:程序博客网 时间:2024/06/05 10:07

转自:hcios

1、创建并添加子控制器

  • 自定义一个子控制器类,可以使用代码、XIB或者StoryBoard等方式
  • 在父控制器类中,添加一个子控制器属性,注意:添加strong属性
  1. #import "SubViewController.h"
  1. @interface ViewController ()
  2.  
  3. @property (nonatomic, strong) SubViewController *subVC;
  4.  
  5. @end
  • 设置子控制器的懒加载方法
  1. -(SubViewController *)subVC {
  2. if (_subVC == nil) {
  3. _subVC = [[SubViewController alloc] init];
  4. [self.view addSubview:_subVC.view];
  5. _subVC.delegate = self;
  6. }
  7. return _subVC;
  8. }
  • 在需要创建子控制器的时候,添加子控制器,使用addChildViewController:方法
  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. [self addChildViewController:self.subVC];
  4. NSLog(@"childVCs: %ld",(unsigned long)self.childViewControllers.count);
  5.  
  6. }

2、父子控制器之间的通信

父控制器和子控制之间一般需要建立通信机制,例如:当点击子控制器上的某个按钮时,通知父控制器跳转到一个新的控制器。父子控制器之间的通信方式可以采用如下两种方式:

  • 代理:在子控制器的类中,添加代理属性和代理方法,并在父控制器中实现代理方法,详见MVC设计模式:1-代理(delegate)协议。代理方法适用于一对一的情况;
  • 通知:当子控制器某个事件发生时,需要通知多个对象时,即一对多,也可以采用通知的方式,详见:MVC设计模式:2-通知(NSNotification)

3、子控制器管理

UIViewController类中,对于子控制器提供了一些管理方法,包括:添加子控制器,移除子控制器等,常用方法如下:

  1. @property(nonatomic,readonly) NSArray *childViewControllers NS_AVAILABLE_IOS(5_0);
  2. //存放所有子控制器的数组
  3.  
  4. - (void)addChildViewController:(UIViewController *)childController NS_AVAILABLE_IOS(5_0);//添加子控制器
  5.  
  6. - (void) removeFromParentViewController NS_AVAILABLE_IOS(5_0);//移除子控制器


勘误

视频中,添加了一个btn,这个btn的属性是weak型的,所以在懒加载时,我的懒加载代码不太准确,应该这样写比较合适。

  1. -(UIButton *)btn{
  2. if (_btn == nil) {
  3. UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
  4. btn.backgroundColor = [UIColor greenColor];
  5. btn.frame = CGRectMake(100, 100, 100, 100);
  6. [self.view addSubview:btn];
  7. [btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
  8. _btn = btn;
  9. }
  10. return _btn;
  11. }

0 0
原创粉丝点击