溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解iOS-按鈕單選與多選邏輯處理

發(fā)布時間:2020-10-17 17:30:01 來源:腳本之家 閱讀:172 作者:smile麗語 欄目:移動開發(fā)

我們經(jīng)常會有多行多列按鈕的頁面, 這個時候我們通常會選擇循環(huán)創(chuàng)建按鈕, 然后進行按鈕單選或者多選的操作!

一. 單選邏輯處理

詳解iOS-按鈕單選與多選邏輯處理

1. 創(chuàng)建按鈕控件數(shù)組及標簽數(shù)組, 并升級當前選中按鈕為屬性,方便使用

#define ZLUnselectedColor [UIColor colorWithRed:(241)/255.0 green:(242)/255.0 blue:(243)/255.0 alpha:1.0]
#define ZLSelectedColor [UIColor colorWithRed:(108)/255.0 green:(187)/255.0 blue:(82)/255.0 alpha:1.0]

@interface ZLRadioViewController ()

// 標簽數(shù)組(按鈕文字)
@property (nonatomic, strong) NSArray *markArray;

// 按鈕數(shù)組
@property (nonatomic, strong) NSMutableArray *btnArray;

// 選中按鈕
@property (nonatomic, strong) UIButton *selectedBtn;

@end
#pragma mark - 懶加載

- (NSArray *)markArray {
  if (!_markArray) {
    NSArray *array = [NSArray array];
    array = @[@"14", @"15", @"16", @"17", @"18"];
    _markArray = array;
  }
  return _markArray;
}

- (NSMutableArray *)btnArray {
  if (!_btnArray) {
    NSMutableArray *array = [NSMutableArray array];
    _btnArray = array;

  }
  return _btnArray;
}

2. 創(chuàng)建單選視圖, 循環(huán)創(chuàng)建按鈕, 并回顯上次選中值

- (void)setupRadioBtnView {

  CGFloat UI_View_Width = [UIScreen mainScreen].bounds.size.width;
  CGFloat marginX = 15;
  CGFloat top = 100;
  CGFloat btnH = 30;
  CGFloat width = (250 - marginX * 4) / 3;

  // 按鈕背景
  UIView *btnsBgView = [[UIView alloc] initWithFrame:CGRectMake((UI_View_Width - 250) * 0.5, 50, 250, 300)];
  btnsBgView.backgroundColor = [UIColor whiteColor];
  [self.view addSubview:btnsBgView];

  // 循環(huán)創(chuàng)建按鈕
  NSInteger maxCol = 3;
  for (NSInteger i = 0; i < 5; i++) {

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.backgroundColor = ZLUnselectedColor;
    btn.layer.cornerRadius = 3.0; // 按鈕的邊框弧度
    btn.clipsToBounds = YES;
    btn.titleLabel.font = [UIFont boldSystemFontOfSize:12];
    [btn setTitleColor:[UIColor colorWithRed:(102)/255.0 green:(102)/255.0 blue:(102)/255.0 alpha:1.0] forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
    [btn addTarget:self action:@selector(chooseMark:) forControlEvents:UIControlEventTouchUpInside];
    NSInteger col = i % maxCol; //列
    btn.x = marginX + col * (width + marginX);
    NSInteger row = i / maxCol; //行
    btn.y = top + row * (btnH + marginX);
    btn.width = width;
    btn.height = btnH;
    [btn setTitle:self.markArray[i] forState:UIControlStateNormal];
    [btnsBgView addSubview:btn];
    btn.tag = i;
    [self.btnArray addObject:btn];
  }

  // 創(chuàng)建完btn后再判斷是否能選擇(之前是已經(jīng)選取過的)
  // 假數(shù)據(jù):之前已經(jīng)上傳16時,則回顯16
  for (UIButton *btn in btnsBgView.subviews) {
    if ([@"16" isEqualToString:btn.titleLabel.text]) {
      btn.selected = YES;
      btn.backgroundColor = ZLSelectedColor;
      break;
    }
  }
}

3. 數(shù)字按鈕單選處理, 根據(jù)tag值去判斷是否是當前選中按鈕

- (void)chooseMark:(UIButton *)sender {
  NSLog(@"點擊了%@", sender.titleLabel.text);

  self.selectedBtn = sender;

  sender.selected = !sender.selected;

  for (NSInteger j = 0; j < [self.btnArray count]; j++) {
    UIButton *btn = self.btnArray[j] ;
    if (sender.tag == j) {
      btn.selected = sender.selected;
    } else {
      btn.selected = NO;
    }
    btn.backgroundColor = ZLUnselectedColor;
  }

  UIButton *btn = self.btnArray[sender.tag];
  if (btn.selected) {
    btn.backgroundColor = ZLSelectedColor;
  } else {
    btn.backgroundColor = ZLUnselectedColor;
  }
}

二. 多選邏輯處理

詳解iOS-按鈕單選與多選邏輯處理

1. 創(chuàng)建按鈕控件數(shù)組和標簽字典, 及選中標簽數(shù)組(數(shù)字)和選中標簽數(shù)組(文字字符串), 為了展示及上傳按鈕數(shù)據(jù)使用

#define ZLUnselectedColor [UIColor colorWithRed:(241)/255.0 green:(242)/255.0 blue:(243)/255.0 alpha:1.0]
#define ZLSelectedColor [UIColor colorWithRed:(128)/255.0 green:(177)/255.0 blue:(34)/255.0 alpha:1.0]

@interface ZLMultiselectController ()

// 標簽數(shù)組
@property (nonatomic, strong) NSArray *markArray;

// 標簽字典
@property (nonatomic, strong) NSDictionary *markDict;

// 選中標簽數(shù)組(數(shù)字)
@property (nonatomic, strong) NSMutableArray *selectedMarkArray;

// 選中標簽數(shù)組(文字字符串)
@property (nonatomic, strong) NSMutableArray *selectedMarkStrArray;

@end
#pragma mark - 懶加載

- (NSArray *)markArray {
  if (!_markArray) {
    NSArray *array = [NSArray array];
    array = @[@"導購", @"客服", @"家教", @"禮儀", @"主持"];
    _markArray = array;
  }
  return _markArray;
}

// 上傳通過文字key取數(shù)字value發(fā)送數(shù)字
- (NSDictionary *)markDict {
  if (!_markDict) {
    NSDictionary *dict = [NSDictionary dictionary];
    dict = @{
         @"導購" : @"3" ,
         @"客服" : @"7",
         @"家教" : @"9",
         @"禮儀" : @"10",
         @"主持" : @"11",
         };
    _markDict = dict;
  }
  return _markDict;
}

- (NSMutableArray *)selectedMarkArray {
  if (!_selectedMarkArray) {
    _selectedMarkArray = [NSMutableArray array];
  }
  return _selectedMarkArray;
}

- (NSMutableArray *)selectedMarkStrArray {
  if (!_selectedMarkStrArray) {
    _selectedMarkStrArray = [NSMutableArray array];
  }
  return _selectedMarkStrArray;
}

2.循環(huán)創(chuàng)建按鈕視圖, 循環(huán)創(chuàng)建按鈕

- (void)setupMultiselectView {

  CGFloat UI_View_Width = [UIScreen mainScreen].bounds.size.width;
  CGFloat marginX = 15;
  CGFloat top = 19;
  CGFloat btnH = 35;
  CGFloat marginH = 40;
  CGFloat height = 130;
  CGFloat width = (UI_View_Width - marginX * 4) / 3;

  // 按鈕背景
  UIView *btnsBgView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, UI_View_Width, height)];
  btnsBgView.backgroundColor = [UIColor whiteColor];
  [self.view addSubview:btnsBgView];

  // 循環(huán)創(chuàng)建按鈕
  NSInteger maxCol = 3;
  for (NSInteger i = 0; i < 5; i++) {

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.backgroundColor = ZLUnselectedColor;
    btn.layer.cornerRadius = 3.0; // 按鈕的邊框弧度
    btn.clipsToBounds = YES;
    btn.titleLabel.font = [UIFont boldSystemFontOfSize:14];
    [btn setTitleColor:[UIColor colorWithRed:(102)/255.0 green:(102)/255.0 blue:(102)/255.0 alpha:1.0] forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
    [btn addTarget:self action:@selector(chooseMark:) forControlEvents:UIControlEventTouchUpInside];
    NSInteger col = i % maxCol; //列
    btn.x = marginX + col * (width + marginX);
    NSInteger row = i / maxCol; //行
    btn.y = top + row * (btnH + marginX);
    btn.width = width;
    btn.height = btnH;
    [btn setTitle:self.markArray[i] forState:UIControlStateNormal];
    [btnsBgView addSubview:btn];
  }

  // 確定按鈕
  UIButton *surebtn = [UIButton buttonWithType:UIButtonTypeCustom];
  [surebtn setTitle:@"確定" forState:UIControlStateNormal];
  surebtn.frame = CGRectMake(marginX * 2, CGRectGetMaxY(btnsBgView.frame) + marginH, UI_View_Width - marginX * 4, 40);
  surebtn.titleLabel.font = [UIFont boldSystemFontOfSize:16];
  [surebtn addTarget:self action:@selector(sureBtnClick) forControlEvents:UIControlEventTouchUpInside];
  surebtn.backgroundColor = [UIColor orangeColor];
  surebtn.layer.cornerRadius = 3.0;
  surebtn.clipsToBounds = YES;
  [self.view addSubview:surebtn];
}

3. 按鈕多選邏輯處理, 并上傳數(shù)據(jù)請求處理

/**
 * 按鈕多選處理
 */
- (void)chooseMark:(UIButton *)btn {

  btn.selected = !btn.selected;

  if (btn.isSelected) {
    btn.backgroundColor = ZLSelectedColor;
    [self.selectedMarkArray addObject:self.markDict[btn.titleLabel.text]];
    [self.selectedMarkStrArray addObject:btn.titleLabel.text];
  } else {
    btn.backgroundColor = ZLUnselectedColor;
    [self.selectedMarkArray removeObject:self.markDict[btn.titleLabel.text]];
    [self.selectedMarkStrArray removeObject:btn.titleLabel.text];
  }
}

/**
 * 確認接口請求處理
 */
- (void)sureBtnClick {
  // 用戶選擇標簽后就把值上傳, 也要傳給服務器下次直接請求回來
  // 按鈕數(shù)字標識字符串
  NSString *numStr = [self.selectedMarkArray componentsJoinedByString:@","];
  // 按鈕文字字符串
  NSString *str = [self.selectedMarkStrArray componentsJoinedByString:@","];

  // 測試:拼接請求參數(shù)
  NSLog(@"按鈕數(shù)字標識字符串:%@", numStr);
  NSLog(@"按鈕文字字符串:%@", str);
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI