美文网首页UI基础
容器控制器(父子控制器)

容器控制器(父子控制器)

作者: 952625a28d0d | 来源:发表于2016-06-16 16:31 被阅读121次
#import "ViewController.h"

#import <Foundation/Foundation.h>

#import "SocietyViewController.h"
#import "TopLineViewController.h"
#import "HotViewController.h"

/*
    多控制器:当有很多控制器,交给一个大控制器管理
    父子控制器:导航控制器,UITabBarControler
    父子控制器本质:搞一个控制器容器,管理很多子控制器.
 
    模仿UITabBarControler,写一个自己的UITabBarControler,条在上面.
 
    任何控制器都可以是一个容器控制器.因为任何控制器都可以调用addChildViewController
 
    // UITabBarControler使用步骤
    // 1.显示UITabBarControler
    // 2.添加子控制器
 
    // ViewController
 */

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *titleView;

@property (weak, nonatomic) IBOutlet UIView *contentView;

@end

@implementation ViewController
- (IBAction)showVc:(UIButton *)sender {
    
    // 获取之前控制器的view
    UIView *firstView;
    if (self.contentView.subviews.count) {
       firstView  = self.contentView.subviews[0];
    }
    
    // 获取子控制器
    UIViewController *vc = self.childViewControllers[sender.tag];
    vc.view.frame = self.contentView.bounds;
    
    // 添加子控制器的View
    [self.contentView addSubview:vc.view];

    // 移除之前控制器的view
    [firstView removeFromSuperview];
}

// 父子控制器:如果A控制器的view添加到B控制器的view,A控制器就要成为B控制器子控制器

// 父子控制器:如果一个控制器的view显示,那么这个控制器必须存在
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 1.添加子控制器
    [self setUpAllChildViewController];
    // 2.设置按钮标题
    [self setUpButtonTitle];
}
// 设置按钮标题
- (void)setUpButtonTitle
{
    NSUInteger count = self.titleView.subviews.count;
    // 3
    // 0 1 2
    for (int i = 0; i < count; i++) {
        
        UIButton *btn = self.titleView.subviews[i];
        UIViewController *vc = self.childViewControllers[i];
        [btn setTitle:vc.title forState:UIControlStateNormal];
    }
}
// 添加子控制器
- (void)setUpAllChildViewController
{
    // 社会
    SocietyViewController *societyVc = [[SocietyViewController alloc] init];
    societyVc.title = @"社会";
    [self addChildViewController:societyVc];
    
    // 头条
    TopLineViewController *topLine = [[TopLineViewController alloc] init];
    topLine.title = @"头条";
    [self addChildViewController:topLine];
    
    // 热点
    HotViewController *hotVc = [[HotViewController alloc] init];
    hotVc.title = @"热点";
    [self addChildViewController:hotVc];
}

@end```

![superAndSonViewController.gif](http:https://img.haomeiwen.com/i189984/ec69ca3e46ea3b80.gif?imageMogr2/auto-orient/strip)

相关文章

  • 父子控制器相关

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

  • 容器控制器(父子控制器)

  • 父子控制器相关

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

  • 父子控制器

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

  • 父子控制器详细解析

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

  • UITabBarController 和 UINavigatio

    标签控制器和导航控制器都是容器控制器,都能容纳其它控制器,决定子控制器的生命周期,当两个容器控制器相互组合时,就没...

  • 添加子控制正确姿势

    如果两个控制器的view为父子控件关系,那么两个控制器必须也要为父子控制器关系官方文档翻译而来. 1.实例化控制器...

  • 网易新闻 今日头条NavigationBar效果以及表情键盘效果

    在介绍该框架之前,先来简单说下父子控制器的知识点: 父子控制器: 若一个控制器通过addChildViewCont...

  • 父子控件、static的作用

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

  • 事件传递

    注意:view之间互为父子关系,那么控制器也必须为父子关系,原因:事件传递,view传递到控制器,如果控制器之间不...

网友评论

    本文标题:容器控制器(父子控制器)

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