成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術(shù)文章
文章詳情頁

iOS自定義UITabBar中間按鈕

瀏覽:4日期:2022-09-17 09:27:17

iOS自定義UITabBar中間按鈕的具體代碼,供大家參考,具體內(nèi)容如下

iOS自定義UITabBar中間按鈕

自定義YLTbaBar繼承自UITabBar

git地址

YLTbaBar.h

//// YLTabBar.h// 自定義tabbar//// Created by nyl on 2018/10/15.// Copyright © 2018年 nieyinlong. All rights reserved.// #import <UIKit/UIKit.h>//tab頁面?zhèn)€數(shù)typedef NS_ENUM(NSInteger, kTbaBarItemUIType) { kTbaBarItemUIType_Three = 3,//底部3個選項 kTbaBarItemUIType_Five = 5,//底部5個選項}; @class YLTabBar; @protocol YLTabBarDelegate <NSObject> -(void)tabBar:(YLTabBar *)tabBar clickCenterButton:(UIButton *)sender; @end @interface YLTabBar : UITabBar @property (nonatomic, weak) id<YLTabBarDelegate> tabDelegate;@property (nonatomic, strong) NSString *centerBtnTitle;@property (nonatomic, strong) NSString *centerBtnIcon; + (instancetype)instanceCustomTabBarWithType:(kTbaBarItemUIType)type; @end

YLTbaBar.m

//// YLTabBar.m// 自定義tabbar//// Created by nyl on 2018/10/15.// Copyright © 2018年 nieyinlong. All rights reserved.// #import 'YLTabBar.h' @interface YLTabBar() @property(nonatomic, strong) UIButton *centerButton;@property(nonatomic, strong) UILabel *centerTitle;@property (nonatomic,assign) kTbaBarItemUIType type; @end @implementation YLTabBar +(instancetype)instanceCustomTabBarWithType:(kTbaBarItemUIType)type{ YLTabBar *tabBar = [[YLTabBar alloc] init]; tabBar.type = type; return tabBar;} -(instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { self.translucent = NO; UIButton *plusBtn = [UIButton buttonWithType:UIButtonTypeCustom]; self.centerButton = plusBtn; [plusBtn addTarget:self action:@selector(plusBtnDidClick) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:plusBtn]; UILabel *lblTitle = [[UILabel alloc] init]; self.centerTitle = lblTitle; lblTitle.font = [UIFont systemFontOfSize:10]; lblTitle.textColor = [UIColor blackColor]; lblTitle.textAlignment = NSTextAlignmentCenter; [self addSubview:lblTitle]; } return self;} -(void)plusBtnDidClick{ if (self.tabDelegate && [self.tabDelegate respondsToSelector:@selector(tabBar:clickCenterButton:)]) { [self.tabDelegate tabBar:self clickCenterButton:self.centerButton]; }} // 調(diào)整子視圖的布局-(void)layoutSubviews{ [super layoutSubviews]; CGFloat width = self.frame.size.width/self.type; Class class = NSClassFromString(@'UITabBarButton'); for (UIView *view in self.subviews) { if ([view isEqual:self.centerTitle]) {//self.centerButton view.frame = CGRectMake(0, 0, width, 15); view.center = CGPointMake(self.frame.size.width/2, self.frame.size.height - view.frame.size.height + 8); }else if ([view isEqual:self.centerButton]) {//self.centerButton view.frame = CGRectMake(0, 0, width, self.frame.size.height); [view sizeToFit]; view.center = CGPointMake(self.frame.size.width/2, 10); }else if ([view isKindOfClass:class]){//system button CGRect frame = view.frame; int indexFromOrign = view.frame.origin.x/width;//防止UIView *view in self.subviews 獲取到的不是有序的 if (indexFromOrign >= (self.type - 1) / 2) { indexFromOrign++; } CGFloat x = indexFromOrign * width; //如果是系統(tǒng)的UITabBarButton,那么就調(diào)整子控件位置,空出中間位置 view.frame = CGRectMake(x, view.frame.origin.y, width, frame.size.height); //調(diào)整badge postion for (UIView *badgeView in view.subviews){ NSString *className = NSStringFromClass([badgeView class]); // Looking for _UIBadgeView if ([className rangeOfString:@'BadgeView'].location != NSNotFound){ badgeView.layer.transform = CATransform3DIdentity; badgeView.layer.transform = CATransform3DMakeTranslation(-17.0, 1.0, 1.0); break; } } } }} -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ //這一個判斷是關(guān)鍵,不判斷的話push到其他頁面,點(diǎn)擊發(fā)布按鈕的位置也是會有反應(yīng)的,這樣就不好了 //self.isHidden == NO 說明當(dāng)前頁面是有tabbar的,那么肯定是在導(dǎo)航控制器的根控制器頁面 //在導(dǎo)航控制器根控制器頁面,那么我們就需要判斷手指點(diǎn)擊的位置是否在發(fā)布按鈕身上 //是的話讓發(fā)布按鈕自己處理點(diǎn)擊事件,不是的話讓系統(tǒng)去處理點(diǎn)擊事件就可以了 if (self.isHidden == NO) { //將當(dāng)前tabbar的觸摸點(diǎn)轉(zhuǎn)換坐標(biāo)系,轉(zhuǎn)換到發(fā)布按鈕的身上,生成一個新的點(diǎn) CGPoint newP = [self convertPoint:point toView:self.centerButton]; //判斷如果這個新的點(diǎn)是在發(fā)布按鈕身上,那么處理點(diǎn)擊事件最合適的view就是發(fā)布按鈕 if ( [self.centerButton pointInside:newP withEvent:event]) { return self.centerButton; }else{//如果點(diǎn)不在發(fā)布按鈕身上,直接讓系統(tǒng)處理就可以了 return [super hitTest:point withEvent:event]; } } else {//tabbar隱藏了,那么說明已經(jīng)push到其他的頁面了,這個時候還是讓系統(tǒng)去判斷最合適的view處理就好了 return [super hitTest:point withEvent:event]; }} -(void)setCenterBtnIcon:(NSString *)centerBtnIcon{ _centerBtnIcon = centerBtnIcon; [self.centerButton setBackgroundImage:[UIImage imageNamed:self.centerBtnIcon] forState:UIControlStateNormal]; [self.centerButton setBackgroundImage:[UIImage imageNamed:self.centerBtnIcon] forState:UIControlStateHighlighted];} -(void)setCenterBtnTitle:(NSString *)centerBtnTitle{ _centerBtnTitle = centerBtnTitle; self.centerTitle.text = centerBtnTitle;} @end

在UITabBarController中使用

// viewDidLoda中, KVO形式添加[self setValue:self.ylTabBar forKey:@'tabBar']; - (YLTabBar *)ylTabBar { if (!_ylTabBar) { _ylTabBar = [YLTabBar instanceCustomTabBarWithType:kTbaBarItemUIType_Five]; _ylTabBar.centerBtnIcon = @'centerIcon'; _ylTabBar.tabDelegate = self; } return _ylTabBar;}

YLTabBarDelegate

-(void)tabBar:(YLTabBar *)tabBar clickCenterButton:(UIButton *)sender{ UIAlertController *alert = [UIAlertController alertControllerWithTitle:@'提示' message:@'點(diǎn)擊了中間按鈕' preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action = [UIAlertAction actionWithTitle:@'OK' style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { // TODO }]; [alert addAction:action]; [self presentViewController:alert animated:YES completion:nil];}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: IOS
相關(guān)文章:
主站蜘蛛池模板: 97久久精品国产精品青草 | 亚洲成人自拍 | 国产三级一区二区 | 99久久精品国产自免费 | 亚洲午夜精品久久久久久抢 | 欧美精品人爱a欧美精品 | 欧美13一14周岁a在线播放 | 亚洲欧美日韩国产专区一区 | 久久ri精品高清一区二区三区 | 扒开两腿猛进入爽爽视频 | 一级片免费在线 | 精品视频在线视频 | 青草青99久久99九九99九九九 | 欧美日韩精品一区二区 | 久久欧美精品欧美久久欧美 | 日韩欧美~中文字幕 | 亚洲欧洲一二三区机械有限公司 | 手机看片日韩日韩国产在线看 | 一级色| 日本不卡一二三 | 看真人视频a级毛片 | 特黄大片aaaaa毛片 | 国产人成久久久精品 | 久久草在线精品 | 中国老太卖淫播放毛片 | 在线观看免费视频网站色 | 中文字幕人成不卡一区 | 欧美一级毛片片aa视频 | 亚洲精品国产成人99久久 | 国产精品黄页网站在线播放免费 | 波多野结衣在线视频免费观看 | www国产精品| 午夜性生活视频 | 97capcom超频在线 | 337p粉嫩大胆噜噜噜鲁 | 成视频年人黄网站免费 | 精品成人免费视频 | 日本www高清免费视频观看 | 国产激情视频在线播放 | 久草福利资源 | 曰韩一级毛片 |