单选以及多选的实现 iOS

2018-01-10  本文已影响52人  软件iOS开发

话不多说,首先看效果图

请点击此处输入图片描述

单选.gif

请点击此处输入图片描述

多选.gif

1、定义UIView的扩展类

UIView+DBExtension.h

import

@interfaceUIView (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 {

returnself.frame.origin.x;

}

(CGFloat)y {

returnself.frame.origin.y;

}

(CGFloat)centerX {

returnself.center.x;

}

(CGFloat)centerY {

returnself.center.y;

}

(CGFloat)width {

returnself.frame.size.width;

}

(CGFloat)height {

returnself.frame.size.height;

}

(CGSize)size {

returnself.frame.size;

}

(CGPoint)origin {

returnself.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.0green:(102)/255.0blue:(102)/255.0alpha: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.0green:(102)/255.0blue:(102)/255.0alpha: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];

}

}

上一篇下一篇

猜你喜欢

热点阅读