1 #import <UIKit/UIKit.h> 2 3 @protocol NJTabBarDelegate <NSObject> 4 /** 5 * @param from 从哪个视图(视图索引) 6 * @param to 到哪个视图(视图索引) 7 */ 8 - (void)tabBarDidSelectBtnFrom:(NSInteger)from to:(NSInteger)to; 9 10 @end 11 12 @interface NJTabBar : UIView 13 14 @property (nonatomic, weak) id<NJTabBarDelegate> delegate; 15 16 /** 17 * 提供给外界创建按钮 18 * 19 * @param norName 默认状态的图片 20 * @param disName 高亮状态的图片 21 */ 22 - (void)addTabBarButtonWithNormalImageName:(NSString *)norName andDisableImageName:(NSString *)disName; 23 24 @end
1 #import "NJTabBar.h" 2 #import "NJTabBarButton.h" 3 4 @interface NJTabBar () 5 6 // 定义变量记录当前选中的按钮 7 @property (nonatomic, weak) UIButton *selectBtn; 8 9 @end 10 11 @implementation NJTabBar 12 13 14 - (void)addTabBarButtonWithNormalImageName:(NSString *)norName andDisableImageName:(NSString *)disName 15 { 16 // 3.1创建按钮 17 NJTabBarButton *btn = [[NJTabBarButton alloc] init]; 18 // 3.2设置按钮上显示的图片 19 // 3.2.1设置默认状态图片 20 [btn setBackgroundImage:[UIImage imageNamed:norName] forState:UIControlStateNormal]; 21 22 // 3.2.2设置不可用状态图片 23 [btn setBackgroundImage:[UIImage imageNamed:disName] forState:UIControlStateDisabled]; 24 25 // 3.4添加按钮到自定义TabBar 26 [self addSubview:btn]; 27 28 // 3.5监听按钮点击事件 29 [btn addTarget:self action:@selector(btnOnClick:) forControlEvents:UIControlEventTouchDown]; 30 31 // 3.6设置默认选中按钮 32 if (1 == self.subviews.count) { 33 [self btnOnClick:btn]; 34 } 35 36 // 3.7设置按钮高亮状态不调整图片 37 btn.adjustsImageWhenHighlighted = NO; 38 } 39 40 - (void)layoutSubviews 41 { 42 [super layoutSubviews]; 43 44 for (int i = 0; i < self.subviews.count ; i++) { 45 46 UIButton *btn = self.subviews[i]; 47 48 // 3.3设置frame 49 CGFloat btnY = 0; 50 CGFloat btnW = self.frame.size.width / self.subviews.count; 51 CGFloat btnH = self.frame.size.height; 52 CGFloat btnX = i * btnW; 53 btn.frame = CGRectMake(btnX, btnY, btnW, btnH); 54 55 // 3.8设置按钮的Tag作为将来切换子控制器的索引 56 btn.tag = i; 57 } 58 } 59 60 - (void)btnOnClick:(UIButton *)btn 61 { 62 63 // 3.切换子控制器 64 // self.selectedIndex = btn.tag; 65 // 通知TabBarController切换控制器 66 if ([self.delegate respondsToSelector:@selector(tabBarDidSelectBtnFrom:to:)]) { 67 [self.delegate tabBarDidSelectBtnFrom:self.selectBtn.tag to:btn.tag]; 68 } 69 70 71 72 // 0.取消上一次选中的按钮 73 self.selectBtn.enabled = YES; 74 75 // 1.设置当前被点击按钮为选中状态 76 btn.enabled = NO; 77 78 // 2.记录当前选中的按钮 79 self.selectBtn = btn; 80 81 } 82 83 84 @end