父子控制器

作者: JoyceZhao | 来源:发表于2016-01-29 10:18 被阅读153次
  • 理论基础

    • 任何控制器都可以添加子控制器
    • 如果A(childVc)控制器的view添加到B(ViewController)控制器的view上,那么A(childVc)控制器就要成为B(ViewController)控制器的子控制器
  • 重要性

    • push
      • 只有导航控制器才具有跳转功能
      • 只要是导航控制器的子控制器就可以拿到当前导航控制器
      • self.navigationController:首先判断下自己是不是导航控制器子控制器,如果不是,判断自己的父控制器是不是导航控制器的子控制器,一直查找,直到没有父控制器
    • modal
      • 判断下自己是否被Modal,如果是,就把当前控制器dismiss,如果不是,判断下自己的父控制器有没有被modal,如果有,把父控制器dismiss,如果还是没有找到,继续去查找,一直到没有父控制器
  • 实现

    • 需求
      • app的顶部实现类似于UITabBarController的功能
    • 思路
      • 多控制器管理的应用
      • 添加所有的子控制器
      • 设置所有子控制器的标题按钮
    • 代码
    /**
    
  • 添加所有的子控制器
    */
    -(void)setupAllChildViewController{

    // 社会
    ZQSocietyViewController *societyVc = [[ZQSocietyViewController alloc] init];
    societyVc.title = @"社会";
    [self addChildViewController:societyVc];

    // 头条
    ZQTopLineViewController *topLineVc = [[ZQTopLineViewController alloc] init];
    topLineVc.title = @"头条";
    [self addChildViewController:topLineVc];

    // 热点
    ZQHotViewController hotVc = [[ZQHotViewController alloc] init];
    hotVc.title = @"热点";
    [self addChildViewController:hotVc];
    }
    /
    *

  • 设置按钮的内容
    */
    -(void)setupButtonTitle{
    NSUInteger count = self.titleView.subviews.count;
    for (int i = 0; i < count; i++) {
    // 获取每个标题按钮
    UIButton btn = self.titleView.subviews[i];
    // 给按钮设置tag
    btn.tag = i;
    // 创建对应的控制器
    UIViewController vc = self.childViewControllers[i];
    // 设置对应控制器的标题
    [btn setTitle:vc.title forState:UIControlStateNormal];
    }
    }
    /

  • 标题按钮的单击事件
    */
    -(IBAction)btnTitleClick:(UIButton *)button {
    // 移除控制器view容器的所有子控件
    [self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    // 获取点击按钮对应的子控制器
    NSUInteger i = button.tag;
    UIViewController *vc = self.childViewControllers[i];
    // 设置当前子控制器view的背景颜色为选中的按钮的背景颜色
    vc.view.backgroundColor = button.backgroundColor;
    // 设置当前子控制器的frame
    vc.view.frame = self.contentView.bounds;
    // 把当前子控制器的view添加到容器控制器的的view上
    [self.contentView addSubview:vc.view];
    }

相关文章

  • 父子控制器相关

    父子控制器:导航控制器,UITabBarViewController等。 父子控制器的设计原理:a控制器的View...

  • 父子控制器相关

    父子控制器相关 控制器父子关系的建立原则 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么...

  • 父子控制器

    父子控制器的小tips 控制器父子关系的建立原则 如果两个控制器的view是父子关系(不管直接还是间接的父子关系)...

  • 父子控制器详细解析

    父子控制器详细解析(一)父子控制器详细解析(二) —— 添加视图的层级问题

  • 父子控件、static的作用

    控制器父子关系的建立原则 - 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器...

  • 父子控制器的重要性(2018-06-03)

    控制器父子关系建立的原则 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这两个控制器也应...

  • iOS-父子控制器

    控制器父子关系的建立原则 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应...

  • 父子控制器

    控制器父子关系的建立原则 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应...

  • 浅说控制器父子关系及示例展示

    控制器父子关系的建立原则 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应...

  • 【转载XMG】父子控制器

    控制器父子关系的建立原则 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应...

网友评论

    本文标题:父子控制器

    本文链接:https://www.haomeiwen.com/subject/fsyjkttx.html