自定义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(, , , )];
backView.tag = BACK_VIEW;
[self.view addSubview:backView]; // 控制器1按钮
[UIButton createButtonWithFrame:CGRectMake(, , , )
withTag:FIRST
withTitle:@"First"
withFont:nil
addTarget:self
action:@selector(buttonEvent:)
haveBorder:YES
insertInView:backView]; // 控制器2按钮
[UIButton createButtonWithFrame:CGRectMake( + , , , )
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:
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:
options:UIViewAnimationOptionTransitionNone
animations:^{
} completion:^(BOOL finished) {
self.current = self.second; // 将按钮设置到最前面
[self.view bringSubviewToFront:[self.view viewWithTag:BACK_VIEW]];
}]; } } @end


自定义UITabbarController控制器的更多相关文章
- 自定义UITabBarController
用的时候直接拷贝代码即可. 1.在AppDelegate设置跟控制器为:PQTabBarController #import "PQTabBarController.h" @int ...
- iOS-自定义 UITabBarController
先来回顾一下UITabBarController ( 稍微详细的在在http://blog.csdn.net/yang198907/article/details/49807011) 伴随UITabB ...
- IOS开发之——自定义导航控制器
BasicNavigationViewController:UINavigationViwController /* 隐藏导航底部线条 */ -(void)viewDidLoad{ [super ...
- iOS彩票项目--第一天,自定义TabBar控制器和自定义TabBar,自定义导航控制器
一.环境配置,和项目层次搭建 二.自定义TabBar 项目中TabBar中的导航按钮美工给的图片太大,图片中包含了图片和文字.最主要的是TabBar上面的按钮图片尺寸是有规定的,当高度大于44的时候, ...
- AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController
AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ...
- 自定义UITabBarController标签视图控制器
首先创建一个类,继承自UItabBarController 然后在.m文件中: 这里我有两个宏定义: #define WIDTH (myView.frame.size.width / 4) //我在写 ...
- OC中UITabBarController控制器
UITabBarController UITabBarController(记为O)常用于管理多个导航控制器,例如有ABC三个导航控制器,可以:addChildViewController(记为A), ...
- 自定义视图控制器切换(iOS)
在iOS开发过程中,通常我们会使用UINavigationController,UITabbarController等苹果提供的视图控制器来切换我们的视图.在iOS5之前,如果要自定义容器视图控制器很 ...
- IOS开发之自定义UITabBarController
UITabBarController是开发中经常会用到的一个视图控制器,但是默认的UITabBarController经常不能够完全满足我们的需求,所以我们经常需要自定义一个UITabBarContr ...
随机推荐
- Ceph 存储集群 - 存储池
目录 一.存储池介绍 二.存储池命令 1. 列出存储池 2. 创建存储池 3. 设置存储池配额 4. 删除存储池 5. 重命名存储池 6. 查看存储池统计信息 7. 生成存储池快照 8. 删除存储池快 ...
- 数组操作方法中的splice()和concat() 以及slice()
1.splice()方法是修改Array的'全能方法',它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素,其中有三个参数(x,y,z) x:从索引x开始操作数组; y:0或不为0,当为0 ...
- 把AspDotNetCoreMvc程序运行在Docker上-part4:实现负载均衡
在上一part<把AspDotNetCoreMvc程序运行在Docker上-part3:使用独立的存储容器>,我们利用MySql容器和Volume实现了真正意义上的数据存储.整个结构非常简 ...
- Jsp&Servlet入门级项目全程实录第8讲
惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 1.添加dao public int studentAdd(Connection con,Student studen ...
- spring事务注解失效问题
问题描述: 由于工作需要,需要在spring中配置两个数据源,有一天突然发现@Transactional注解失效 环境框架: springmvc+spring+spring jdbcTemplate ...
- Python 创建字典的多种方式
1.通过关键字dict和关键字参数创建 >>> dic = dict(spam = 1, egg = 2, bar =3) >>> dic {'bar': 3, ' ...
- Python 两个list合并成一个字典
方法一:list1 = ['k1','k2','k3'] list2 = ['v1','v2','v3'] dic = dict(map(lambda x,y:[x,y],list1,list2)) ...
- CodeForces765A
A. Neverending competitions time limit per test:2 seconds memory limit per test:512 megabytes input: ...
- try,except用法
lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"] # 模拟for循环 it = lst.__iter_ ...
- 神奇的Flex 布局
layout是css中的一个重点.传统的页面布局是盒子模型,依赖 display属性 ,position属性 , float属性.它对于那些特殊布局非常不方便,而且定位用多了会出现挺多的bug. 所以 ...