自定义UITabbarController控制器

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

效果:

 

源码地址:

https://github.com/YouXianMing/Custom-TabbarController-Verson-One/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

时间: 2024-12-11 01:55:38

自定义UITabbarController控制器的相关文章

UIkit框架(14)自定义标签控制器

自定义UITabBarController子类 UITabBarController的tabBar往往不能满足我们的需求 通过自定义UITabBarController子类自定义标签栏是经常采用的方式. 基本步骤: 1)定义UIButton子类作为标签按钮 2)定义模型类,管理每个页面的控制器以及对应标签栏上的数据 3)自定义标签栏 4)定义UITabBarController子类 定义标签按钮 添加两种创建方法:只显示图片和文字图片都显示的 + (AMTabBarButton *)tabBar

猫猫学iOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封装代码,并且系统的UINavigationController不能满足我们的需求了,所以得自定义. 首先,我们在NYTabBarViewContro

自定义UITabBarController

最近发现一款和糗百差不多的应用叫<逗乐玩>,它的底部标签栏的效果不错,于是动手写了下,下面给出具体代码示例. #pragma mark - 自定义UITabBar - (void)createCustomTabBarView{ _backGroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, ScreenHeight - tab_hight, ScreenWidth, tab_hight)]; _backGround

自定义导航控制器

自定义导航控制器的步骤:新建一个类,继承自UINavigationController 自定义导航控制器的作用 1. 重写push方法就可以拦截所有压入栈中的子控制器,统一做一些处理 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; 1.1为了在push控制器时隐藏UITabBar,需要做一下设置 viewController.hidesBottomBarWhenPushe

Unreal Engine 4 C++ PlatformerGame自定义角色控制器源代码分析

Unreal Engine 4 C++ PlatformerGame自定义角色控制器源代码分析 官方商店里有个PlatformerGame整个免费的游戏,是一个卷轴类的跑酷游戏.整个项目的角色控制器很有意思,可以跑.跳.滑行,很酷.这里来分析下它具体是如何实现的. UCharacterMovementComponent这个类实现了角色控制器的大部分功能,PlatformerGame实现了一个自定义的MovmentComponent,叫UPlatformerPlayerMovementComp,它

自定义UITabBarController和TabBar

系统自带的UITabBarController,有个内置的UITabBar,在iOS7和iOS6中的风格完全不一样. ios7 ios6 那么如何自定义UITabBar呢 1.自定义UITabBarController:新建一个类,继承自UITabBarController 2.新建一个类,继承自UIView,用来做TabBar,封装内部按钮 3.在自定义的UITabBarController中创建自定义的TabBar,添加到默认的UITabBar上面

iOS7新特性 ViewController转场切换(三) 自定义视图控制器容器的切换---非交互式

@继续前面的内容,这一章,主要介绍自定义ViewController容器上视图VC的切换.先来看看系统给我们提供的容器控制器 UINavigationController和UITabBarController 都有一个NSArray类型的属性viewControllers,很明显,存储的就是需要切换的视图VC.同理,我们定义一个ContainerViewController,是UIViewController的直接子类,用来作为容器依托,额,其他属性定义详见代码吧,这里不多说了.(PS:原先我进

IOS开发之自定义UITabBarController

UITabBarController是开发中经常会用到的一个视图控制器,但是默认的UITabBarController经常不能够完全满足我们的需求,所以我们经常需要自定义一个UITabBarController. 接下来,我们就来自定义一个UITabBarController.首先我们应该明白一点,自定义一个UITabBarController的时候,其实大多数情况下我们需要修改的只是它下面的UITabBar,我们需要更加丰富的样式来满足我们的需求.接下来我们看一下具体操作! 第一步:创建一个类

swift-UINavigationController纯代码自定义导航控制器及底部工具栏的使用

step1:自定义一个类  NTViewController,该类继承UITabBarController: // // NTViewController.swift // Housekeeper // // Created by 卢洋 on 15/10/20. // Copyright © 2015年 奈文摩尔. All rights reserved. // import Foundation import UIKit class NTViewController:UITabBarContr