最近马上放假所以比较忙,今天简单写一个项目中出现的单选按钮的横竖样式,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

Swift基础之集成单选按钮横竖两种样式的更多相关文章

  1. 多个超链接a 选中的和不选中的两种样式

    <script src="http://www.jq22.com/jquery/1.8.3/jquery.min.js"> 浏览器自带的jquery库 <scri ...

  2. Python基础:Python运行的两种基本方式

    完成Python的安装之后,我们可以开始编写Python代码以及运行Python程序了.我们来看一下运行Python具体有哪几种方式 1.REPL 所谓REPL即read.eva.print.loop ...

  3. Idea集成SpringBoot实现两种热部署方式(亲测有效)

    即将介绍的两种热部署方式: 1.SpringLoaded 2.DevTools 区别: SpringLoader:SpringLoader 在部署项目时使用的是热部署的方式. DevTools:Dev ...

  4. spring boot 集成 Filter 的两种方式

    两种方式:(两种方式同时存在时,@Bean优先@ServletComponentScan实例化,生成两个对象) 1)@ServletComponentScan注解+@WebFilter注解 2)@Be ...

  5. 【mybatis基础】mybatis开发dao两种方法

    mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目.mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.mybat ...

  6. 一个ListView怎么展示两种样式

    private class MyBaseMsgAdapter extends BaseAdapter { //获取数据适配器中条目类型的总数,修改成两种(纯文本,输入+文字) @Override pu ...

  7. springboot集成websocket的两种实现方式

    WebSocket跟常规的http协议的区别和优缺点这里大概描述一下 一.websocket与http http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能 ...

  8. 黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式

    ------- android培训.java培训.期待与您交流! ---------- 多线程: 进程和线程: 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者 ...

  9. Spring+Dubbo集成Redis的两种解决方案

    当下我们的系统数据库压力都非常大,解决数据库的瓶颈问题势在必行,为了解决数据库的压力等需求,我们常用的是各种缓存,比如redis,本文就来简单讲解一下如何集成redis缓存存储,附github源码. ...

随机推荐

  1. 【LSGDOJ 2015】数页码

    题目描述 一本书的页码是从 1-n 编号的连续整数:1, 2, 3, ... , n.请你求出全部页码中所有单个数字的和,例如第 123 页,它的和就是 1+2+3=6. 输入 一行为 n(1 < ...

  2. ●UOJ 131 [NOI2015] 品酒大会

    题链: http://uoj.ac/problem/131 题解: 网上大多数的方法都是用并查集维护.这里呢,给出另一种自己YY的解法(但实际上本质差不多吧): 后缀数组,RMQ,单调栈 1).预处理 ...

  3. bzoj2811[Apio2012]Guard 贪心

    2811: [Apio2012]Guard Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 905  Solved: 387[Submit][Statu ...

  4. 关于惠普hp服务器开机时F10菜单变成F10 Function Disabled的解决方法

    今天笔者由于在Intelligent Provisioning智能配置里不小心将"启动Intelligent Provisioning"选项钩选成禁用了,如下 结果就造成,在之后服 ...

  5. c# 判断datatable中是否存在某列

    if (datatable.columns.contains("要找的列名"))

  6. python笔记三(list、tuple)

    一.list list的增删改查 #增, classmates.append("nadech") #在末尾追加一个元素 classmates.insert(1,"agui ...

  7. 02_版本控制工具SVN

    SubVersion: 安装:根据电脑版本选择安装64或32位的subversion,尽量不要选择中文或者有空格的目录安装 版本控制仓库: 创建命令:SVNadmin create 目录 启动SVN服 ...

  8. 阅读源码(III)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> Medium上有一篇文章Why You Don't Deserve That Dream Developer Jo ...

  9. MacOS下Rails+Nginx+SSL环境的搭建(中)

    三.配置Nginx 先是修改 hosts 文件,意思是创建一个本地域名以便我们访问,比如: $ sudo subl /etc/hosts 127.0.0.1 rails_project.local 但 ...

  10. dynamic initializer和全局变量

    "慎用全局变量,包括全局静态变量" 是众所周知的原则,因为全局变量除了会增加程序的维护成本. 如果全局变量是个复杂的对象,并且还使用其他的全局变量,那情况就变得复杂的多.因为全局变 ...