欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS 標(biāo)簽Tag列表的實現(xiàn)代碼

 更新時間:2017年04月13日 14:32:12   作者:王隆帥  
這篇文章主要介紹了本篇文章主要介紹了iOS 標(biāo)簽Tag列表的實現(xiàn)代碼,非常具有實用價值,需要的朋友可以參考下

前言

1、之前項目中會有一些標(biāo)簽列表來顯示某些特性或要求,如下圖(代碼實現(xiàn)后的效果):

2、期間也是瀏覽了好多其他的第三方,但是可能是沒找到好的方法去尋找吧,沒有找到一個合適的,況且又不是特別復(fù)雜的東西,所以就自己寫了一套,但是注意因為我們項目中使用的是RAC+Mansory,所以想要使用的話需要引入這兩個庫=_=。

3、自己寫的時候考慮的不是太多,中心思想是ViewModel做定制需求,View通過ViewModel來實現(xiàn)定制化UI,其他更多的是邏輯上的排版,所以不做更多贅述,自己體會Y^o^Y 。

View布局

LSLabelTextView.h的實現(xiàn)

//
// LSLabelTextView.h
// RenCheRen
//
// Created by 王隆帥 on 15/12/30.
// Copyright © 2015年 王隆帥. All rights reserved.
//

#import "YCView.h"

@interface LSLabelTextView : YCView

@end

LSLabelTextView.m的實現(xiàn)

//
// LSLabelTextView.m
// RenCheRen
//
// Created by 王隆帥 on 15/12/30.
// Copyright © 2015年 王隆帥. All rights reserved.
//

#import "LSLabelTextView.h"
#import "LSLabelTextViewModel.h"

@interface LSLabelTextView ()

@property (nonatomic, strong) LSLabelTextViewModel *viewModel;

@end
@implementation LSLabelTextView {

  MASConstraint *_toLeftBtnMasConstraint;
  MASConstraint *_toTopBtnMasonstraint;
  MASConstraint *_toLeftSelfMasConstraint;
  MASConstraint *_toTopSelfMasonstraint;
}

- (instancetype)initWithViewModel:(id<YCViewModelProtocol>)viewModel {

  self.viewModel = (LSLabelTextViewModel *)viewModel;
  return [super initWithViewModel:viewModel];
}

- (void)yc_bindViewModel {

  @weakify(self);
  [[RACObserve(self, viewModel.dataArray) distinctUntilChanged] subscribeNext:^(id x) {

    @strongify(self);

    [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

    if (self.viewModel.dataArray.count <= 0) {

      __weak UIView *weakNullView;
      UIView *nullView = [[UIView alloc] init];
      weakNullView = nullView;
      [self addSubview:weakNullView];
      WS(weakSelf)
      [weakNullView mas_makeConstraints:^(MASConstraintMaker *make) {

        make.top.right.left.bottom.equalTo(weakSelf);
        make.height.equalTo(weakSelf.viewModel.nullHeight);
      }];
      return;
    }

    NSInteger lineNum = 1;
    CGFloat allWidth = 0;
    __weak UIButton *lastBtn;

    for (int i = 0; i < self.viewModel.dataArray.count; i++) {

       NSString *string = [self.viewModel.dataArray stringWithIndex:i];
      __weak UIButton *weakBtn = [self ls_getBtnWithString:string];
      [self addSubview:weakBtn];

      CGSize size = [string widthWithHeight:20 andFont:self.viewModel.textFontNum];

      CGFloat needFloat = size.width < self.viewModel.miniWidth ? self.viewModel.miniWidth : size.width;

      if (lastBtn) {

        WS(weakSelf)
        [weakBtn mas_makeConstraints:^(MASConstraintMaker *make) {

          _toLeftBtnMasConstraint = make.left.equalTo(lastBtn.mas_right).offset(weakSelf.viewModel.labelHorizontalSpace);
          [_toLeftBtnMasConstraint activate];

          _toTopBtnMasonstraint = make.top.equalTo(lastBtn.mas_bottom).offset(weakSelf.viewModel.labelVerticalSpace);
          [_toTopBtnMasonstraint deactivate];

          _toLeftSelfMasConstraint = make.left.equalTo(weakSelf.viewModel.leftToViewEdge);
          _toTopSelfMasonstraint = make.top.equalTo(lastBtn);

          make.size.equalTo(CGSizeMake(needFloat + 20, weakSelf.viewModel.labelHeight));
        }];

        if (allWidth + self.viewModel.labelHorizontalSpace + needFloat + 20 + self.viewModel.rightToViewEdge > self.viewModel.allWidth) {
          [_toLeftSelfMasConstraint activate];
          [_toLeftBtnMasConstraint deactivate];
          [_toTopBtnMasonstraint activate];
          [_toTopSelfMasonstraint deactivate];

          lineNum ++;
          allWidth = self.viewModel.leftToViewEdge + needFloat + 20;
        } else {

          [_toLeftSelfMasConstraint deactivate];
          [_toLeftBtnMasConstraint activate];
          [_toTopBtnMasonstraint deactivate];
          [_toTopSelfMasonstraint activate];

          allWidth = allWidth + self.viewModel.labelHorizontalSpace + needFloat + 20;
        }
      } else {

        WS(weakSelf)
        [weakBtn mas_makeConstraints:^(MASConstraintMaker *make) {

          make.left.equalTo(weakSelf.viewModel.leftToViewEdge);
          make.size.equalTo(CGSizeMake(needFloat + 20, weakSelf.viewModel.labelHeight));
          make.top.equalTo(weakSelf.viewModel.topToViewEdge);
        }];

        allWidth = allWidth + self.viewModel.leftToViewEdge + needFloat + 20;
      }

      lastBtn = weakBtn;
    }

    WS(weakSlef)
    [lastBtn mas_updateConstraints:^(MASConstraintMaker *make) {

      make.bottom.equalTo(weakSlef.viewModel.bottomToViewEdge);
    }];

  }];
}

- (UIButton *)ls_getBtnWithString:(NSString *)string {

  UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  btn.layer.borderWidth = 0.5;
  btn.layer.borderColor = self.viewModel.borderColor.CGColor;
  [btn setTitleColor:self.viewModel.titleColor forState:UIControlStateNormal];
  btn.backgroundColor = self.viewModel.backgroundColor;
  btn.layer.masksToBounds = YES;
  btn.layer.cornerRadius = self.viewModel.cornerRadius;
  btn.titleLabel.font = YC_YAHEI_FONT(self.viewModel.textFontNum);
  [btn setTitle:string forState:UIControlStateNormal];
  btn.ls_typeString = string;

  return btn;
}

@end

ViewModel適配

LSLabelTextViewModel.h的實現(xiàn)

//
// LSLabelTextViewModel.h
// RenCheRen
//
// Created by 王隆帥 on 15/12/30.
// Copyright © 2015年 王隆帥. All rights reserved.
//

#import "YCViewModel.h"

@interface LSLabelTextViewModel : YCViewModel
/**
 * 標(biāo)簽數(shù)組
 */
@property (nonatomic, strong) NSMutableArray *dataArray;
/**
 * 總的寬度
 */
@property (nonatomic, assign) CGFloat allWidth;
/**
 * 沒有標(biāo)簽時的高度
 */
@property (nonatomic, assign) CGFloat nullHeight;
/**
 * 文字字體大小
 */
@property (nonatomic, assign) CGFloat textFontNum;
/**
 * 取得標(biāo)簽為空的時候,標(biāo)簽最小長度
 */
@property (nonatomic, assign) CGFloat miniWidth;
/**
 * 標(biāo)簽高度
 */
@property (nonatomic, assign) CGFloat labelHeight;
/**
 * 最左側(cè)標(biāo)簽距離View的邊緣的寬度
 */
@property (nonatomic, assign) CGFloat leftToViewEdge;
/**
 * 最右側(cè)標(biāo)簽距離View的邊緣的寬度
 */
@property (nonatomic, assign) CGFloat rightToViewEdge;
/**
 * 最上側(cè)標(biāo)簽距離View的邊緣的寬度
 */
@property (nonatomic, assign) CGFloat topToViewEdge;
/**
 * 最下側(cè)標(biāo)簽距離View的邊緣的寬度
 */
@property (nonatomic, assign) CGFloat bottomToViewEdge;
/**
 * 橫向標(biāo)簽之間的寬度
 */
@property (nonatomic, assign) CGFloat labelHorizontalSpace;
/**
 * 縱向標(biāo)簽之間的寬度
 */
@property (nonatomic, assign) CGFloat labelVerticalSpace;
/**
 * label(btn) 的相關(guān)屬性
 */
@property (nonatomic, assign) CGFloat borderWidth;
@property (nonatomic, strong) UIColor *borderColor;
@property (nonatomic, strong) UIColor *titleColor;
@property (nonatomic, strong) UIColor *backgroundColor;
@property (nonatomic, assign) CGFloat cornerRadius;

@end

LSLabelTextViewModel.m的實現(xiàn)

//
// LSLabelTextViewModel.m
// RenCheRen
//
// Created by 王隆帥 on 15/12/30.
// Copyright © 2015年 王隆帥. All rights reserved.
//

#import "LSLabelTextViewModel.h"

@implementation LSLabelTextViewModel

- (NSMutableArray *)dataArray {

  if (!_dataArray) {

    _dataArray = [[NSMutableArray alloc] init];
  }
  return _dataArray;
}

@end

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

相關(guān)文章

  • iOS彈幕開發(fā)中遇到的問題匯總

    iOS彈幕開發(fā)中遇到的問題匯總

    最近做項目的時候需要實現(xiàn)彈幕這個功能, 雖然感覺實現(xiàn)起來也不是很復(fù)雜,但還是遇到了一些問題,下面這篇文章主要給大家總結(jié)介紹了在iOS彈幕開發(fā)中遇到的問題,文中將解決的方法介紹的非常詳細,需要的朋友可以參考下。
    2018-01-01
  • iOS新功能引導(dǎo)提示界面實例詳解

    iOS新功能引導(dǎo)提示界面實例詳解

    在開發(fā)中,現(xiàn)在很多app更新了新功能時都會給出用戶一個提示,以方便用戶更好的體驗,那么這個功能如何實現(xiàn)的呢?下面通過本文給大家分享iOS新功能引導(dǎo)提示界面實例詳解,需要的的朋友參考下吧
    2017-04-04
  • 淺談iOS關(guān)于頭文件的導(dǎo)入問題

    淺談iOS關(guān)于頭文件的導(dǎo)入問題

    本篇文章主要介紹了淺談iOS關(guān)于頭文件的導(dǎo)入問題,具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • 詳解iOS多線程GCD問題

    詳解iOS多線程GCD問題

    本篇文章主要介紹了iOS多線程GCD問題,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • iOS 懶加載的使用實例代碼

    iOS 懶加載的使用實例代碼

    本篇文章主要介紹了iOS 懶加載的使用實例代碼,詳細的介紹了什么是懶加載和優(yōu)點,及其實例。有興趣的可以了解一下
    2017-05-05
  • iOS發(fā)送短信功能的實現(xiàn)代碼

    iOS發(fā)送短信功能的實現(xiàn)代碼

    本篇文章主要介紹了iOS發(fā)送短信功能的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 阿里數(shù)據(jù)iOS端啟動速度優(yōu)化心得

    阿里數(shù)據(jù)iOS端啟動速度優(yōu)化心得

    本篇文章給大家詳細分析了阿里數(shù)據(jù)iOS端啟動速度優(yōu)化的知識點以及心得,對此有興趣的朋友參考學(xué)習(xí)下吧。
    2018-02-02
  • IOS簡單實現(xiàn)瀑布流UICollectionView

    IOS簡單實現(xiàn)瀑布流UICollectionView

    這篇文章主要為大家介紹了IOS簡單實現(xiàn)瀑布流UICollectionView的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • iOS App開發(fā)中的UISegmentedControl分段組件用法總結(jié)

    iOS App開發(fā)中的UISegmentedControl分段組件用法總結(jié)

    UISegmentedControl主要被用來制作分頁按鈕或添加跳轉(zhuǎn)到不同位置的標(biāo)簽,這里我們就來看一下iOS App開發(fā)中的UISegmentedControl分段組件用法總結(jié),需要的朋友可以參考下
    2016-06-06
  • iOS動畫-定時對UIView進行翻轉(zhuǎn)和抖動的方法

    iOS動畫-定時對UIView進行翻轉(zhuǎn)和抖動的方法

    下面小編就為大家?guī)硪黄猧OS動畫-定時對UIView進行翻轉(zhuǎn)和抖動的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04

最新評論