zoukankan      html  css  js  c++  java
  • 自定义UITabbarController控制器

    自定义UITabbarController控制器

    这是定制UITabbarController的基本原理,没有进行功能性封装.

    效果:

     

    源码地址:

    https://github.com/YouXianMing/Custom-TabbarController-Verson-One/tree/master

    https://github.com/YouXianMing/Custom-TabbarController-Verson-Two/tree/master 

    源码:

    //
    //  ViewController.m
    //  TabbarController
    //
    //  Created by XianMingYou on 15/4/15.
    //  Copyright (c) 2015年 XianMingYou. All rights reserved.
    //
    
    #import "ViewController.h"
    
    #import "FirstViewController.h"
    #import "SecondViewController.h"
    
    #import "UIButton+DemoUse.h"
    
    typedef enum : NSUInteger {
        FIRST = 0x12,
        SECOND,
        BACK_VIEW,
    } EButtonFlag;
    
    @interface ViewController ()
    
    @property (nonatomic, strong) FirstViewController  *first;
    @property (nonatomic, strong) SecondViewController *second;
    
    @property (nonatomic, strong) UIViewController     *current;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        self.view.backgroundColor = [UIColor whiteColor];
        
        // 初始化第一个控制器
        self.first   = [FirstViewController new];
        [self addChildViewController:self.first];
        
        // 初始化第二个控制器
        self.second = [SecondViewController new];
        [self addChildViewController:self.second];
        
        // 加载第一个控制器的视图
        [self.first didMoveToParentViewController:self];
        [self.view addSubview:self.first.view];
        
        // 简易存储当前控制器
        self.current = self.first;
        
        // 创建出按钮
        [self createButtons];
    }
    
    - (void)createButtons {
        UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 200, 320, 80)];
        backView.tag     = BACK_VIEW;
        [self.view addSubview:backView];
        
        // 控制器1按钮
        [UIButton createButtonWithFrame:CGRectMake(10, 0, 145, 80)
                                withTag:FIRST
                              withTitle:@"First"
                               withFont:nil
                              addTarget:self
                                 action:@selector(buttonEvent:)
                             haveBorder:YES
                           insertInView:backView];
        
        // 控制器2按钮
        [UIButton createButtonWithFrame:CGRectMake(10 + 155, 0, 145, 80)
                                withTag:SECOND
                              withTitle:@"Second"
                               withFont:nil
                              addTarget:self
                                 action:@selector(buttonEvent:)
                             haveBorder:YES
                           insertInView:backView];
    }
    
    - (void)buttonEvent:(UIButton *)button {
        
        if (button.tag == FIRST) {
            
            // 此句话必加(否则点击两次的话会报错)
            if ([self.current isEqual:self.first]) {
                return;
            }
            
            // 控制器转场
            [self transitionFromViewController:self.current
                              toViewController:self.first
                                      duration:0
                                       options:UIViewAnimationOptionTransitionNone
                                    animations:^{
                                    }  completion:^(BOOL finished) {
                                        self.current = self.first;
                                        
                                        // 将按钮设置到最前面
                                        [self.view bringSubviewToFront:[self.view viewWithTag:BACK_VIEW]];
                                    }];
            
        } else if (button.tag == SECOND) {
            
            // 此句话必加(否则点击两次的话会报错)
            if ([self.current isEqual:self.second]) {
                return;
            }
            
            // 控制器转场
            [self transitionFromViewController:self.current
                              toViewController:self.second
                                      duration:0
                                       options:UIViewAnimationOptionTransitionNone
                                    animations:^{
                                    }  completion:^(BOOL finished) {
                                        self.current = self.second;
                                        
                                        // 将按钮设置到最前面
                                        [self.view bringSubviewToFront:[self.view viewWithTag:BACK_VIEW]];
                                    }];
            
        }
        
    }
    
    @end

  • 相关阅读:
    IO库 8.5
    IO库 8.4
    标准模板库——IO库
    IO库 8.3
    IO库 8.2
    IO库 8.1
    CF 599D Spongebob and Squares(数学)
    Django入门学习(一)
    hdu 5733
    uva 11210
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4429329.html
Copyright © 2011-2022 走看看