亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現動態自適應標簽

2020-07-26 02:53:05
字體:
來源:轉載
供稿:網友

本文實例為大家分享了iOS實現動態自適應標簽的具體代碼,供大家參考,具體內容如下

先上效果圖

 設計要求

1、標簽的寬度是按內容自適應的

2、一行顯示的標簽個數是動態的,放得下就放,放不下就換行

3、默認選中第一個

4、至少選中一個標簽

實現思路

首先我們從這個效果上來看,這個標簽是有選中和不選中狀態,那我們首選的控件肯定就是用 UIButton來實現了。

這個小程度的重點就在于標簽能自動換行,還是智能的,不是固定一行多少個那種,這個我們通過計算每個按鈕實際寬度與屏幕的寬度進行比較就能判斷是否需要換行了。

還有一點就是處理 至少選中一個標簽的功能,我這里有一種方式,就是控制按鈕的 userInteractionEnabled 屬性來實現,如果只有一個按鈕的時候就把那一個按鈕的這個屬性給設置成 NO,這樣就禁止用戶對它進行點擊事件了,這個時候其它按鈕是可以正常選中的,只要選中的按鈕大于1個,那就把剛才那個按鈕屬性再改成YES,這樣那個按鈕就又能點了。

具體看代碼

創建一個繼承于UIView的 XGTagView類

//// XGTagView.h// 動態標簽//// Created by xgao on 17/3/22.// Copyright © 2017年 xgao. All rights reserved.//#import <UIKit/UIKit.h>@interface XGTagView : UIView/** * 初始化 * * @param frame frame * @param tagArray 標簽數組 * * @return */- (instancetype)initWithFrame:(CGRect)frame tagArray:(NSMutableArray*)tagArray;// 標簽數組@property (nonatomic,retain) NSArray* tagArray;// 選中標簽文字顏色@property (nonatomic,retain) UIColor* textColorSelected;// 默認標簽文字顏色@property (nonatomic,retain) UIColor* textColorNormal;// 選中標簽背景顏色@property (nonatomic,retain) UIColor* backgroundColorSelected;// 默認標簽背景顏色@property (nonatomic,retain) UIColor* backgroundColorNormal;@end

//// XGTagView.m// 動態標簽//// Created by xgao on 17/3/22.// Copyright © 2017年 xgao. All rights reserved.//#import "XGTagView.h"@interface XGTagView()@end@implementation XGTagView/** * 初始化 * * @param frame frame * @param tagArray 標簽數組 * * @return */- (instancetype)initWithFrame:(CGRect)frame tagArray:(NSArray*)tagArray{  self = [super initWithFrame:frame]; if (self) { _tagArray = tagArray; [self setUp]; } return self;}// 初始化- (void)setUp{  // 默認顏色 _textColorNormal = [UIColor darkGrayColor]; _textColorSelected = [UIColor whiteColor]; _backgroundColorSelected = [UIColor redColor]; _backgroundColorNormal = [UIColor whiteColor];  // 創建標簽按鈕 [self createTagButton];}// 重寫set屬性- (void)setTagArray:(NSMutableArray *)tagArray{  _tagArray = tagArray;  // 重新創建標簽 [self resetTagButton];}- (void)setTextColorSelected:(UIColor *)textColorSelected{ _textColorSelected = textColorSelected; // 重新創建標簽 [self resetTagButton];}- (void)setTextColorNormal:(UIColor *)textColorNormal{  _textColorNormal = textColorNormal; // 重新創建標簽 [self resetTagButton];}- (void)setBackgroundColorSelected:(UIColor *)backgroundColorSelected{  _backgroundColorSelected = backgroundColorSelected; // 重新創建標簽 [self resetTagButton];}- (void)setBackgroundColorNormal:(UIColor *)backgroundColorNormal{  _backgroundColorNormal = backgroundColorNormal; // 重新創建標簽 [self resetTagButton];}#pragma mark - Private// 重新創建標簽- (void)resetTagButton{  // 移除之前的標簽 for (UIButton* btn in self.subviews) { [btn removeFromSuperview]; } // 重新創建標簽 [self createTagButton];}// 創建標簽按鈕- (void)createTagButton{  // 按鈕高度 CGFloat btnH = 28; // 距離左邊距 CGFloat leftX = 6; // 距離上邊距 CGFloat topY = 10; // 按鈕左右間隙 CGFloat marginX = 10; // 按鈕上下間隙 CGFloat marginY = 10; // 文字左右間隙 CGFloat fontMargin = 10;  for (int i = 0; i < _tagArray.count; i++) {  UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(marginX + leftX, topY, 100, btnH); btn.tag = 100+i; // 默認選中第一個 if (i == 0) {  btn.selected = YES; }  // 按鈕文字 [btn setTitle:_tagArray[i] forState:UIControlStateNormal];  //------ 默認樣式 //按鈕文字默認樣式 NSMutableAttributedString* btnDefaultAttr = [[NSMutableAttributedString alloc]initWithString:btn.titleLabel.text]; // 文字大小 [btnDefaultAttr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:13] range:NSMakeRange(0, btn.titleLabel.text.length)]; // 默認顏色 [btnDefaultAttr addAttribute:NSForegroundColorAttributeName value:self.textColorNormal range:NSMakeRange(0, btn.titleLabel.text.length)]; [btn setAttributedTitle:btnDefaultAttr forState:UIControlStateNormal];  // 默認背景顏色 [btn setBackgroundImage:[self imageWithColor:self.backgroundColorNormal] forState:UIControlStateNormal];  //----- 選中樣式 // 選中字體顏色 NSMutableAttributedString* btnSelectedAttr = [[NSMutableAttributedString alloc]initWithString:btn.titleLabel.text]; // 選中顏色 [btnSelectedAttr addAttribute:NSForegroundColorAttributeName value:self.textColorSelected range:NSMakeRange(0, btn.titleLabel.text.length)]; // 選中文字大小 [btnSelectedAttr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:13] range:NSMakeRange(0, btn.titleLabel.text.length)]; [btn setAttributedTitle:btnSelectedAttr forState:UIControlStateSelected];  // 選中背景顏色 [btn setBackgroundImage:[self imageWithColor:self.backgroundColorSelected] forState:UIControlStateSelected];  // 圓角 btn.layer.cornerRadius = btn.frame.size.height / 2.f; btn.layer.masksToBounds = YES; // 邊框 btn.layer.borderColor = [UIColor lightGrayColor].CGColor; btn.layer.borderWidth = 0.5;  // 設置按鈕的邊距、間隙 [self setTagButtonMargin:btn fontMargin:fontMargin];  // 處理換行 if (btn.frame.origin.x + btn.frame.size.width + marginX > self.frame.size.width) {  // 換行  topY += btnH + marginY;    // 重置  leftX = 6;  btn.frame = CGRectMake(marginX + leftX, topY, 100, btnH);    // 設置按鈕的邊距、間隙  [self setTagButtonMargin:btn fontMargin:fontMargin]; }  // 重置高度 CGRect frame = btn.frame; frame.size.height = btnH; btn.frame = frame;  //----- 選中事件 [btn addTarget:self action:@selector(selectdButton:) forControlEvents:UIControlEventTouchUpInside];  [self addSubview:btn];  leftX += btn.frame.size.width + marginX; }  // 檢測按鈕狀態,最少選中一個 [self checkButtonState];}// 設置按鈕的邊距、間隙- (void)setTagButtonMargin:(UIButton*)btn fontMargin:(CGFloat)fontMargin{  // 按鈕自適應 [btn sizeToFit];  // 重新計算按鈕文字左右間隙 CGRect frame = btn.frame; frame.size.width += fontMargin*2; btn.frame = frame;}// 檢測按鈕狀態,最少選中一個- (void)checkButtonState{  int selectCount = 0; UIButton* selectedBtn = nil; for(int i=0;i < _tagArray.count; i++){ UIButton* btn = (UIButton*)[self viewWithTag:100+i]; if(btn.selected){  selectCount++;  selectedBtn = btn; } } if (selectCount == 1) { // 只有一個就把這一個給禁用手勢 selectedBtn.userInteractionEnabled = NO; }else{ // 解除禁用手勢 for(int i=0;i < _tagArray.count; i++){  UIButton* btn = (UIButton*)[self viewWithTag:100+i];  if(!btn.userInteractionEnabled){  btn.userInteractionEnabled = YES;  } } }}// 根據顏色生成UIImage- (UIImage*)imageWithColor:(UIColor*)color{  CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); // 開始畫圖的上下文 UIGraphicsBeginImageContext(rect.size);  // 設置背景顏色 [color set]; // 設置填充區域 UIRectFill(CGRectMake(0, 0, rect.size.width, rect.size.height));  // 返回UIImage UIImage* image = UIGraphicsGetImageFromCurrentImageContext(); // 結束上下文 UIGraphicsEndImageContext(); return image;}#pragma mark - Event// 標簽按鈕點擊事件- (void)selectdButton:(UIButton*)btn{  btn.selected = !btn.selected;  // 檢測按鈕狀態,最少選中一個 [self checkButtonState];}@end

好了,大家如果有什么地方看不明白的,留言給我就行。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久人人爽人人爽人人片av高清| 亚洲国产精品va在线| 亚洲精品国产精品自产a区红杏吧| 欧美成人精品三级在线观看| 日韩一中文字幕| 少妇久久久久久| 欧美精品在线第一页| 91国产美女视频| 成人黄在线观看| 欧洲永久精品大片ww免费漫画| 国产欧美一区二区三区在线| 亚洲欧美在线免费观看| 久久成年人视频| 欧美日韩国内自拍| 奇米成人av国产一区二区三区| 久久久久久香蕉网| 亚洲色图第一页| 91干在线观看| 欧美大成色www永久网站婷| 日本一区二区在线免费播放| 亚洲第一福利网站| 欧美激情视频一区二区三区不卡| 国产女人精品视频| 国产精品一二区| 26uuu亚洲国产精品| 日韩激情av在线播放| 欧美亚洲日本网站| 精品亚洲一区二区三区四区五区| 国产精品美女主播| 亚洲国产一区自拍| 午夜伦理精品一区| 日本韩国欧美精品大片卡二| 亚洲有声小说3d| 欧日韩不卡在线视频| 亚洲精品在线观看www| 久久久亚洲天堂| 国产一区二区三区丝袜| 国产亚洲精品成人av久久ww| 亚洲一区二区在线播放| 国产亚洲精品美女久久久| 国产欧美日韩中文字幕| 亚洲视频自拍偷拍| 国产精品亚洲一区二区三区| 欧美激情网友自拍| 成人高h视频在线| 色悠悠久久久久| 亚洲国产精彩中文乱码av在线播放| 亚洲国产精品福利| 精品久久久999| 在线免费观看羞羞视频一区二区| 国产精品亚洲视频在线观看| 国产精品对白刺激| 久久99久久99精品免观看粉嫩| 亚洲性生活视频在线观看| 亚洲欧洲成视频免费观看| 美女福利视频一区| 欧美在线视频在线播放完整版免费观看| 最新国产精品拍自在线播放| 成人在线国产精品| 欧美性视频在线| 亚洲精品久久久久国产| 亚洲国产精品成人av| 久久五月天色综合| 亚洲成色777777女色窝| 91精品久久久久久久久久另类| 久久91精品国产91久久跳| 久久人人爽人人爽人人片亚洲| 91亚洲精品在线| 亚洲天堂一区二区三区| 欧美性xxxx极品hd满灌| 中文字幕欧美日韩| 97香蕉超级碰碰久久免费的优势| 国产精品欧美亚洲777777| 国内成人精品一区| 久久久国产成人精品| 欧美诱惑福利视频| 日韩美女免费线视频| 亚洲影视九九影院在线观看| 国产亚洲精品久久久久久牛牛| 欧美激情一区二区三级高清视频| 国产综合色香蕉精品| 国产精品偷伦视频免费观看国产| 国产精品劲爆视频| 免费97视频在线精品国自产拍| 最近2019中文字幕第三页视频| 亚洲a在线播放| 97超级碰碰人国产在线观看| 97超级碰碰碰久久久| 成人黄色激情网| 久久精品国产欧美亚洲人人爽| 日韩成人激情在线| 久久久噜噜噜久久中文字免| 操人视频在线观看欧美| 欧美亚洲国产日韩2020| 亚洲国产精品99久久| 欧美性69xxxx肥| 亚洲精品www| 欧美最顶级的aⅴ艳星| 中文字幕日韩精品在线观看| 狠狠色狠狠色综合日日小说| 久久亚洲国产成人| 欧美激情欧美激情| 欧美精品在线视频观看| 午夜精品视频在线| 国产性猛交xxxx免费看久久| 欧美另类极品videosbestfree| 亚洲久久久久久久久久| 国产精品美女在线| 日韩视频欧美视频| 美女国内精品自产拍在线播放| 久久成人精品一区二区三区| 一本色道久久88综合日韩精品| 国产成人午夜视频网址| 成人黄色免费在线观看| 久久精品视频99| 国产精品成人观看视频国产奇米| 国产成人福利网站| 中文字幕欧美日韩va免费视频| 欧美激情xxxx性bbbb| 亚洲精品成人网| 日韩的一区二区| 亚洲aa中文字幕| 亚洲精品国产综合区久久久久久久| 国产精品视频一区国模私拍| 亚洲在线视频观看| 日本一区二区三区四区视频| 日韩hd视频在线观看| 国产在线精品自拍| 欧美一级成年大片在线观看| 久久久久久久国产精品| 亚洲成人中文字幕| 亚洲片国产一区一级在线观看| 国产精品mp4| 亚洲免费一级电影| 韩国三级电影久久久久久| 久久久亚洲国产天美传媒修理工| 久久久久久中文| www.日韩视频| 久久亚洲精品一区二区| 国产精品99久久久久久www| 日本不卡视频在线播放| 国产一区二区成人| 午夜精品久久久久久久男人的天堂| 91精品国产乱码久久久久久久久| 久久精品国产99国产精品澳门| 日本国产高清不卡| 狠狠色狠色综合曰曰| 国产一区二区久久精品| 欧美激情区在线播放| 亚洲午夜未删减在线观看| 久久久人成影片一区二区三区| 韩国视频理论视频久久| 国内精品久久久久久影视8| 国产精品第七十二页| 亚洲bt天天射| 久久久久久久久久久免费精品| 韩日欧美一区二区| 丝袜亚洲欧美日韩综合| 欧美理论电影在线观看| 日韩欧美a级成人黄色| 91影院在线免费观看视频| 久久久久久网址| 国产精品一区二区在线| 性欧美xxxx交|