美文网首页
单选以及多选的实现 iOS

单选以及多选的实现 iOS

作者: 软件iOS开发 | 来源:发表于2018-01-10 13:09 被阅读52次

    话不多说,首先看效果图

    请点击此处输入图片描述

    单选.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];

    }

    }

    相关文章

      网友评论

          本文标题:单选以及多选的实现 iOS

          本文链接:https://www.haomeiwen.com/subject/bghonxtx.html