分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
转自:http://blog.csdn.net/xn4545945/article/details/35994863
一、自定义的思路
iOS中的TabBarController确实已经很强大了,大部分主流iOS应用都会采用。但是往往也不能满足全部的需求,因此需要自定义TabBar,自定义需要对系统的TabBar工作方式有很好的理解,自定义需要勇气。
自定义TabBar的原则:尽量利用系统自带TabBar,只改需要改的地方。
二、自定义TabBar的总体过程
1.
先把自带的
TabBar
条给取消了
2.
自己做一个
view,
上面放几个按钮
,
设定按钮的点击事件
.
并设置
selectIndex。
3.关联各个子viewController,覆盖相关事件。
三、细节很重要
1.
让自己创建的按钮关联到
viewController:
•用
tabbar
的
selectedIndex
属性
.
设置这个属性就行了
.
2.
取消系统的高亮
:
•
可以自定义一个按钮
.
重写里面的
setHighhighted
方法
,
什么也不做就行了
.(
如果调用
super
就相当于没写
)
3.
关于几个按钮只选中一个的方法
:
•
设置一个属性
,
记录上一个选中的按钮
.
•
点击当前按钮时
,
把上一个按钮设置为未选中
,
并把当前按钮设置为选中
,
最后把当前按钮赋值给上一个按钮
.
四、初步自定义
直接上代码,详见注释。
- #import <UIKit/UIKit.h>
- @interface XNTabBarController : UITabBarController
- @end
XNTabBarController.m
- //
- // XNTabBarController.m
- //
- //
- // Created by neng on 14-6-19.
- // Copyright (c) 2014年 neng. All rights reserved.
- //
- #import "XNTabBarController.h"
- #import "Common.h"
- #import "XNTabBarButton.h"
- @interface XNTabBarController ()
- /**
- * 设置之前选中的按钮
- */
- @property (nonatomic, weak) UIButton *selectedBtn;
- @end
- @implementation XNTabBarController
- - (void)viewDidLoad {
- [super viewDidLoad];
- //下面两个方法在开发中是经常会用到的
- // NSLog(@"%s",__func__);
- // NSLog(@"%@",self.view.subviews); //能打印出所有子视图,和其frame
- LogFun;
- LogSubviews(self.view);
- //删除现有的tabBar
- CGRect rect = self.tabBar.frame;
- [self.tabBar removeFromSuperview]; //移除TabBarController自带的下部的条
- //测试添加自己的视图
- UIView *myView = [[UIView alloc] init];
- myView.frame = rect;
- myView.backgroundColor = [UIColor redColor];
- [self.view addSubview:myView];
- for (int i = 0; i < 5; i++) {
- //UIButton *btn = [[UIButton alloc] init];
- XNTabBarButton *btn = [[XNTabBarButton alloc] init];
- NSString *imageName = [NSString stringWithFormat:@"TabBar%d", i + 1];
- NSString *imageNameSel = [NSString stringWithFormat:@"TabBar%dSel", i + 1];
- [btn setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
- [btn setImage:[UIImage imageNamed:imageNameSel] forState:UIControlStateSelected];
- CGFloat x = i * myView.frame.size.width / 5;
- btn.frame = CGRectMake(x, 0, myView.frame.size.width / 5, myView.frame.size.height);
- [myView addSubview:btn];
- btn.tag = i;//设置按钮的标记, 方便来索引当前的按钮,并跳转到相应的视图
- //带参数的监听方法记得加"冒号"
- [btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
- //设置刚进入时,第一个按钮为选中状态
- if (0 == i) {
- btn.selected = YES;
- self.selectedBtn = btn; //设置该按钮为选中的按钮
- }
- }
- }
- /**
- * 自定义TabBar的按钮点击事件
- */
- - (void)clickBtn:(UIButton *)button {
- //1.先将之前选中的按钮设置为未选中
- self.selectedBtn.selected = NO;
- //2.再将当前按钮设置为选中
- button.selected = YES;
- //3.最后把当前按钮赋值为之前选中的按钮
- self.selectedBtn = button;
- //4.跳转到相应的视图控制器. (通过selectIndex参数来设置选中了那个控制器)
- self.selectedIndex = button.tag;
- }
- @end
XNTabBarButton.h
- #import <UIKit/UIKit.h>
- @interface XNTabBarButton : UIButton
- @end
XNTabBarButton.m
- #import "XNTabBarButton.h"
- @implementation XNTabBarButton
- /**什么也不做就可以取消系统按钮的高亮状态*/
- - (void)setHighlighted:(BOOL)highlighted{
- // [super setHighlighted:highlighted];
- }
- @end
五、代码重构