来源|简书
作者|i_苏
话不多说,首先看效果图
单选.gif
多选.gif
1、定义UIView的扩展类
UIView+DBExtension.h
import
@interface UIView (DBExtension) @property (nonatomic, assign) CGFloat x; @property (nonatomic, assign) CGFloat y; @property (nonatomic, assign) CGFloat centerX; @property (nonatomic, assign) CGFloat centerY; @property (nonatomic, assign) CGFloat width; @property (nonatomic, assign) CGFloat height; @property (nonatomic, assign) CGSize size; @property (nonatomic, assign) CGPoint origin; @end UIView+DBExtension.m @implementation UIView (DBExtension) // set (void)setX:(CGFloat)x { CGRect frame = self.frame; frame.origin.x = x; self.frame = frame; } (void)setY:(CGFloat)y { CGRect frame = self.frame; frame.origin.y = y; self.frame = frame; } (void)setCenterX:(CGFloat)centerX { CGPoint center = self.center; center.x = centerX; self.center = center; } (void)setCenterY:(CGFloat)centerY { CGPoint center = self.center; center.y = centerY; self.center = center; } (void)setWidth:(CGFloat)width { CGRect frame = self.frame; frame.size.width = width; self.frame = frame; } (void)setHeight:(CGFloat)height { CGRect frame = self.frame; frame.size.height = height; self.frame = frame; } (void)setSize:(CGSize)size { CGRect frame = self.frame; frame.size = size; self.frame = frame; } (void)setOrigin:(CGPoint)origin { CGRect frame = self.frame; frame.origin = origin; self.frame = frame; } // get (CGFloat)x { return self.frame.origin.x; } (CGFloat)y { return self.frame.origin.y; } (CGFloat)centerX { return self.center.x; } (CGFloat)centerY { return self.center.y; } (CGFloat)width { return self.frame.size.width; } (CGFloat)height { return self.frame.size.height; } (CGSize)size { return self.frame.size; } (CGPoint)origin { return self.frame.origin; } @end
其次
首先实现多选功能
// 设置多选视图
(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 = 自己设置的颜色; 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: 按钮标题数组 [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]; } /**
按钮多选处理
*/ (void)chooseMark:(UIButton *)btn { btn.selected = !btn.selected; if (btn.isSelected) { btn.backgroundColor = 自己设置的颜色; [self.selectedMarkArray addObject:self.markDict[btn.titleLabel.text]]; [self.selectedMarkStrArray addObject:btn.titleLabel.text]; } else { btn.backgroundColor = 自己设置的颜色; [self.selectedMarkArray removeObject:self.markDict[btn.titleLabel.text]]; [self.selectedMarkStrArray removeObject:btn.titleLabel.text]; } }
最后实现单选按钮
// 设置单选视图 (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, self.markArray.count *btnH + self.markArray.count/3 * (btnH + marginX))]; btnsBgView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:btnsBgView]; // 循环创建按钮 NSInteger maxCol = 3; for (NSInteger i = 0; i < self.markArray.count; i++) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.backgroundColor = [UIColor lightGrayColor]; 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]; } //获取最后一个按钮的偏移量 UIButton *lastBtn = _btnArray[_btnArray.count - 1]; NSLog(@"%f",lastBtn.y); // 创建完btn后再判断是否能选择(之前是已经选取过的) // 假数据:之前已经上传16时,则回显16 // for (UIButton *btn in btnsBgView.subviews) { // if ([@"16" isEqualToString:btn.titleLabel.text]) { // btn.selected = YES; // btn.backgroundColor = ZLSelectedColor; // break; // } // } } /**
数字按钮单选处理
*/ (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 = button数组 [j] ; if (sender.tag == j) { btn.selected = sender.selected; } else { btn.selected = NO; } btn.backgroundColor = [UIColor lightGrayColor]; } // 根据tag值去判断 UIButton *btn = self.btnArray[sender.tag]; if (btn.selected) { btn.backgroundColor = [UIColor blueColor]; } else { btn.backgroundColor = [UIColor lightGrayColor]; } }
希望对你有所帮助!