国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

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

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

我們經常會有多行多列按鈕的頁面, 這個時候我們通常會選擇循環創建按鈕, 然后進行按鈕單選或者多選的操作!

一. 單選邏輯處理

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

#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 ()// 標簽數組(按鈕文字)@property (nonatomic, strong) NSArray *markArray;// 按鈕數組@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. 創建單選視圖, 循環創建按鈕, 并回顯上次選中值

- (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];  // 循環創建按鈕  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];  }  // 創建完btn后再判斷是否能選擇(之前是已經選取過的)  // 假數據:之前已經上傳16時,則回顯16  for (UIButton *btn in btnsBgView.subviews) {    if ([@"16" isEqualToString:btn.titleLabel.text]) {      btn.selected = YES;      btn.backgroundColor = ZLSelectedColor;      break;    }  }}

3. 數字按鈕單選處理, 根據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;  }}

二. 多選邏輯處理

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

#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 ()// 標簽數組@property (nonatomic, strong) NSArray *markArray;// 標簽字典@property (nonatomic, strong) NSDictionary *markDict;// 選中標簽數組(數字)@property (nonatomic, strong) NSMutableArray *selectedMarkArray;// 選中標簽數組(文字字符串)@property (nonatomic, strong) NSMutableArray *selectedMarkStrArray;@end
#pragma mark - 懶加載- (NSArray *)markArray {  if (!_markArray) {    NSArray *array = [NSArray array];    array = @[@"導購", @"客服", @"家教", @"禮儀", @"主持"];    _markArray = array;  }  return _markArray;}// 上傳通過文字key取數字value發送數字- (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.循環創建按鈕視圖, 循環創建按鈕

- (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];  // 循環創建按鈕  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. 按鈕多選邏輯處理, 并上傳數據請求處理

/** * 按鈕多選處理 */- (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 {  // 用戶選擇標簽后就把值上傳, 也要傳給服務器下次直接請求回來  // 按鈕數字標識字符串  NSString *numStr = [self.selectedMarkArray componentsJoinedByString:@","];  // 按鈕文字字符串  NSString *str = [self.selectedMarkStrArray componentsJoinedByString:@","];  // 測試:拼接請求參數  NSLog(@"按鈕數字標識字符串:%@", numStr);  NSLog(@"按鈕文字字符串:%@", str);}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浠水县| 综艺| 延川县| 浦城县| 康平县| 石屏县| 台南市| 凉城县| 博野县| 凉山| 伊宁市| 黑龙江省| 茶陵县| 仪征市| 尼勒克县| 永靖县| 九龙城区| 惠东县| 康保县| 张家港市| 天气| 寻甸| 庄河市| 永福县| 中西区| 五寨县| 旺苍县| 石河子市| 任丘市| 拜城县| 博野县| 类乌齐县| 莱州市| 全椒县| 宁蒗| 永城市| 山东| 桐乡市| 大新县| 闻喜县| 清新县|