首页 >iOS开发

单选以及多选的实现 iOS

2018-01-09 16:09 编辑: suiling 分类:iOS开发 来源:i_苏
  • 来源|简书

  • 作者|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];
}
}

希望对你有所帮助!

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:从零收拾一个hybrid框架(一)-- 从选择JS通信方案开始
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部