Swift基础之集成单选按钮横竖两种样式

最近马上放假所以比较忙,今天简单写一个项目中出现的单选按钮的横竖样式,PS:封装的是Swift语言样式

首先创建一个UIView的类,然后创建方法,最后调用类中的方法进行显示

//参数一:需要显示的内容数据,参数二:类型:1、横;2、竖
    func hSingleSelBtn(titleArray:NSArray, typeE aTypeE:Int) {
        
        let frameE:CGRect = self.frame;
        let aWidthH:CGFloat = frameE.width;
        let aHeightT:CGFloat = frameE.height;
        
        if aTypeE==1 {
            //横向
            let widthH:CGFloat = (aWidthH-20-30*CGFloat(titleArray.count))/CGFloat(titleArray.count);
            
            for i:Int in 0 ..< titleArray.count {
                
                let btn = UIButton.init(frame: CGRectMake(10+(widthH+20)*CGFloat(i), (aHeightT-16)/2, 16, 16));
                btn.setImage(UIImage.init(named: "unchoose"), forState: .Normal);
                btn.setImage(UIImage.init(named: "choose"), forState: .Selected);
                if i==0 {
                    btn.selected = true;
                }else{
                    btn.selected = false;
                }
                btn.tag = i+10000;
                btn.addTarget(self, action: #selector(btnClick), forControlEvents: .TouchUpInside);
                self.addSubview(btn);
                
                let labelL = UILabel.init(frame: CGRectMake(40+(widthH+20)*CGFloat(i), 0, widthH, aHeightT));
                labelL.text = titleArray[i] as? String;
                labelL.adjustsFontSizeToFitWidth = true;
                self.addSubview(labelL);
            }
        }else{
            //纵向
            let hidthH = CGFloat(aHeightT / CGFloat(titleArray.count));
            
            for i:Int in 0 ..< titleArray.count {
                
                let btn = UIButton.init(frame: CGRectMake(10, (hidthH-16)/2 + hidthH * CGFloat(i), 16, 16));
                btn.setImage(UIImage.init(named: "unchoose"), forState: .Normal);
                btn.setImage(UIImage.init(named: "choose"), forState: .Selected);
                if i==0 {
                    btn.selected = true;
                }else{
                    btn.selected = false;
                }
                btn.tag = i+10000;
                btn.addTarget(self, action: #selector(btnClick), forControlEvents: .TouchUpInside);
                self.addSubview(btn);
                
                let labelL = UILabel.init(frame: CGRectMake(40, hidthH * CGFloat(i), aWidthH, hidthH));
                labelL.text = titleArray[i] as? String;
                labelL.adjustsFontSizeToFitWidth = true;
                self.addSubview(labelL);
            }
        }
        currentTag = 10000;
    }
    
    func btnClick(btn:UIButton) {
        if !btn.selected {
            btn.selected = !btn.selected;
            //上一个按钮还原
            let buttonN = self.viewWithTag(currentTag) as? UIButton;
            buttonN?.selected = false;
            
            currentTag = btn.tag;
        }
    }

视图的展示使用

//横向数量少的单选,两三个
        let titleArr:NSArray = ["男","女"];
        
        let sexLabel = UILabel.init(frame: CGRectMake(10, 100, 50, 40));
        sexLabel.text = "性别";
        self.view.addSubview(sexLabel);
        
        let bgView = SingleSelBtnView.init(frame: CGRectMake(60, 100, 200, 40));
        //bgView.backgroundColor = UIColor.lightGrayColor();
        bgView.hSingleSelBtn(titleArr, typeE: 1);
        self.view.addSubview(bgView);
        
        //纵向数量可多个
        let titleArr1:NSArray = ["A.北京","B.上海","C.广州","D.深圳"];
        
        let oneLabel = UILabel.init(frame: CGRectMake(10, 200, 100, 40));
        oneLabel.text = "单选题";
        self.view.addSubview(oneLabel);
        
        let bgView1 = SingleSelBtnView.init(frame: CGRectMake(60, 250, 200, 200));
        //bgView1.backgroundColor = UIColor.lightGrayColor();
        bgView1.hSingleSelBtn(titleArr1, typeE: 2);
        self.view.addSubview(bgView1);

效果展示:

源码Demo(还有定义屏幕宽高的方法):http://download.csdn.net/detail/hbblzjy/9643958







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hbblzjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值