iOS 동적 적응 탭 구현

8993 단어 iOS라벨
본 논문 의 사례 는 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
자,여러분 이 잘 모 르 는 곳 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기