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
Swift基础之集成单选按钮横竖两种样式的更多相关文章
- 多个超链接a 选中的和不选中的两种样式
<script src="http://www.jq22.com/jquery/1.8.3/jquery.min.js"> 浏览器自带的jquery库 <scri ...
- Python基础:Python运行的两种基本方式
完成Python的安装之后,我们可以开始编写Python代码以及运行Python程序了.我们来看一下运行Python具体有哪几种方式 1.REPL 所谓REPL即read.eva.print.loop ...
- Idea集成SpringBoot实现两种热部署方式(亲测有效)
即将介绍的两种热部署方式: 1.SpringLoaded 2.DevTools 区别: SpringLoader:SpringLoader 在部署项目时使用的是热部署的方式. DevTools:Dev ...
- spring boot 集成 Filter 的两种方式
两种方式:(两种方式同时存在时,@Bean优先@ServletComponentScan实例化,生成两个对象) 1)@ServletComponentScan注解+@WebFilter注解 2)@Be ...
- 【mybatis基础】mybatis开发dao两种方法
mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目.mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.mybat ...
- 一个ListView怎么展示两种样式
private class MyBaseMsgAdapter extends BaseAdapter { //获取数据适配器中条目类型的总数,修改成两种(纯文本,输入+文字) @Override pu ...
- springboot集成websocket的两种实现方式
WebSocket跟常规的http协议的区别和优缺点这里大概描述一下 一.websocket与http http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能 ...
- 黑马程序员——JAVA基础之简述多线程,两种创建多线程的方式
------- android培训.java培训.期待与您交流! ---------- 多线程: 进程和线程: 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者 ...
- Spring+Dubbo集成Redis的两种解决方案
当下我们的系统数据库压力都非常大,解决数据库的瓶颈问题势在必行,为了解决数据库的压力等需求,我们常用的是各种缓存,比如redis,本文就来简单讲解一下如何集成redis缓存存储,附github源码. ...
随机推荐
- Python中文件的操作
文件的操作介绍 文件打开的方法 主要有两种: no with 格式:open(file, mode='r', buffering=-1, encoding=None, errors=None, new ...
- javascript templating
JavaScript Micro-Templating I’ve had a little utility that I’ve been kicking around for some time no ...
- nginx模块,模块的配置使用
nginx模块官方模块(默认支持的)第三方模块 1. --with-http_stub_status_module nginx的客户端状态 配置syntax: sub_status;default:- ...
- 转载c++常忘的知识点
C++的一些知识点比较零碎,下面清单的形式做一些记录与归纳,以供参考. 1.赋值操作符重载(深复制): (1)由于目标对象可能引用了以前的一些数据,所以应该先delete这些数据: (2)注意到对象可 ...
- python 的字符串驻留机制
我们都知道python中的引用计数机制,相同对象的引用其实都是指向内存中的同一个位置,这个也叫做“python的字符串驻留机制”.其他的就不多说了,自行研究. 重点!!!!!! python的引用计数 ...
- python类(class)中参数self的解释说明
python类(class)中参数self的简单解释 1.self只有在类的方法中才会有,其他函数或方法是不必带self的. 2.在调用时不必传入相应的参数.3.在类的方法中(如__init__),第 ...
- js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面
js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面 , 做手机端开发时,发现一个问题,有些浏览器,在网速比较慢的情况下,js文件没有加载完,后续的调用已经开始调用了, ...
- 深入浅出低功耗蓝牙(BLE)协议栈
深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解蓝牙"连接"?如果蓝牙协议只有ATT没有GATT会发生什么? 协议栈框架 一般而言,我们把某个协议的实现代码称 ...
- delphi 线程教学第七节:在多个线程时空中,把各自的代码塞到一个指定的线程时空运行
第七节:在多个线程时空中,把各自的代码塞到一个指定的线程时空运行 以 Ado 为例,常见的方法是拖一个 AdoConnection 在窗口上(或 DataModule 中), 再配合 AdoQ ...
- C语言中file文件指针概念及其操作 (转载)
文件 文件的基本概念 所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件. ...