Button的设置及各种属性
(1)UIButton类继承自UIControl,而UIControl继承自UIView,因为UIView就是个矩形区域,所以UIButton实例化的对象其实都是一个矩形,虽然有各种圆角、增加联系人、信息按钮等等,给它们加个背景它们就现形成矩形了,而且它们有个frame属性,这就是设置位置和矩形框的。
(2)UIButton创建一个按钮不用实例化,也就是不用alloc和init,而是直接调用内置的几个工厂方法即可,这一点和UILabel *label1=[[UILabel alloc]init]不同,而且这些类型里面最常用的时Custom类型,因为我们可以自定义图片,以及图片和文字的位置。
(3)按钮有很多状态,正常状态Normal、被点击时状态Highlighted等等,所以可以分别对不同状态设置属性。
(4)其实按钮最重要的不是上面那些设置属性,而是按钮关联的操作是什么?即点击后发生什么,这需要一个addtarget操作函数,如果多个按钮用到同一个函数,则需要tag属性来区别是哪个按钮。
(5)要自定义按钮,一种方式是我们先自定义一个继承UIButton的类,然后对这个类进行重写函数,相当于定制,最后用这个类去创建按钮,这些按钮也就具有自定义的样式(这种方法只针对自定义按钮类型有效)。
 - (void)viewDidLoad {
   //生成一个btn1对象,不需要alloc和init,而是直接用内置的工厂方法,有很多可CMD+点击查看
   UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
   //设置位置和宽高
   btn1.frame=CGRectMake(, , , );
   //设置按钮的文字,状态有好几种常用的时Normal和Highlighted(点击时状态),可CMD+点击查看
   [btn1 setTitle:@"点我啊!" forState:UIControlStateNormal];
   //设置点击时的文本
   [btn1 setTitle:@"我被点了!" forState:UIControlStateHighlighted];
   //设置文字颜色
   [btn1 setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
   [btn1 setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
   //设置点击时按钮背景颜色,呃,完全不起作用,即无效果
   [btn1 setTintColor:[UIColor purpleColor]];
   //点击时按钮发光,就是在按钮中间发亮光,这个有效果
   btn1.showsTouchWhenHighlighted=YES;
   //设置tag标签,唯一标记用,可用于分辨是哪个按钮控件
   btn1.tag=;
   //设置背景颜色
   btn1.backgroundColor=[UIColor redColor];
   //现在高版本的iOS里这个方法会让人抓狂,因为我们发现,不设置背景时,圆角按钮没有边框,所以上面设置frame其实意义不大
   //设置了背景或者图片后,背景是矩形,说好的圆角呢?坑爹呢!
   //所以现在大多数开发都是用UIButtonTypeCustom,而不是UIButtonTypeRoundedRect
   //最重要的添加触发事件用户交互
   //self是指调用哪个对象的方法
   //btnClick:是调用的方法,btnClick和btnClick:不一样,后者表示有参数
   //UIControlEventTouchUpInside是触发事件,有很多,可以CMD+点击查看
   //这里三个参数都可以随意更换,比如新建一个类Hi,在类里定义一个方法-(void)report;
   //然后在此文件引入Hi.h头文件,在这里实例化一个对象hi1,然后就可以用hi1代替self,用report代替btnClick
   //意思就是点击后调用的是hi1对象里面的report方法
   [btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
   //再增加一个按钮
   UIButton *btn2=[UIButton buttonWithType:UIButtonTypeContactAdd];
   btn2.frame=CGRectMake(, , , );
   //这个增加联系人按钮其实也是一个矩形,和上面的一样,都是继承自UIControl,而后者又继承自UIView,所以是矩形
   //虽然按钮就一点点大,但点击整个矩形区域都是相当于点击按钮
   btn2.backgroundColor=[UIColor greenColor];
   //设置标签
   btn2.tag=;
   //增加事件:和btn1调用同一个方法,但问题是我们如果需要区分是哪个按钮的话,就需要用到tag,并且把控件作为参数传递给btnClick
   [btn2 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
   //再增加一个最常用的Custom按钮,其他按钮自己尝试
   UIButton *btn3=[UIButton buttonWithType:UIButtonTypeCustom];
   btn3.frame=CGRectMake( ,  , , );
   btn3.backgroundColor=[UIColor redColor];
   btn3.tag=;
   [btn3 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
   //设置图片背景被点击时变暗(但没有图片背景时则无效果)
   btn3.adjustsImageWhenHighlighted=YES;
   //所以,增加图片方式之一是增加背景图片,这个图片如小会被放大充满整个背景
   [btn3 setBackgroundImage:[UIImage imageNamed:@"logo.png"] forState:UIControlStateNormal];
   //还有一种增加图片的方式,是在按钮上面加而不是背景,这种方式不会缩放图片,而且会居中
   [btn3 setImage:[UIImage imageNamed:@"logo.png"] forState:UIControlStateNormal];
   //设置按钮文字,增加的文字会和setImage图片一并居中,图片在左边,文字紧随其后
   [btn3 setTitle:@"自定义按钮" forState:UIControlStateNormal];
   //如果需要重新排版这个图片和按钮文字的位置,则需要重写UIButton类里面的两个函数,点击UIButton可查看
   //- (CGRect)titleRectForContentRect:(CGRect)contentRect;文字相对于按钮的位置
   //- (CGRect)imageRectForContentRect:(CGRect)contentRect;图片相对于按钮的位置
   //第一步:可以重新定义一个UIButton类叫myButton,在.m里重写如下函数
   //- (CGRect)titleRectForContentRect:(CGRect)contentRect{
   //    return CGRectMake(50, 25, 100, 40);
   //}
   //- (CGRect)imageRectForContentRect:(CGRect)contentRect{
   //    return CGRectMake(150, 25, 40, 40);
   //}
   //第二步,在这个文件中引入myButton.h头文件,然后实例化btn3的时候,用myButton,而不用原始的UIButton
   //myButton相当于稍微定制了一下原生的UIButton,所以前者实例出得对象也就具有定制效果
   //这种方式仅对UIButtonTypeCustom有效,其他无效
   //把三个按钮显示出来
   [self.view addSubview:btn1];
   [self.view addSubview:btn2];
   [self.view addSubview:btn3];
   [super viewDidLoad];
   // Do any additional setup after loading the view, typically from a nib.
 }
 //增加一个参数,即由原先的-(void)btnClick{}变成如下
 //因为我们知道这里都是按钮对象,所以可以用(UIButton *)sender,但通常我们用通用指针id
 -(void)btnClick:(id)sender{
   //把传递过来的控件参数转化成按钮
   UIButton *btn=(UIButton *)sender;
   //把btn.tag转化成整型
   NSLog(@"OMG,it is %i",(int)btn.tag);
 }
Button的设置及各种属性的更多相关文章
- 为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性
		为什么button在设置标题时要用一个方法.而不像lable一样直接用一个属性 原因是有时我们对 button做一次点击,须要改变button的标题.仅仅实用方法才干做到,而label是标签 ... 
- JQUERY操作html--获取和设置内容、属性、回调函数
		一:jQuery - 获取内容和属性 1.获得内容 - text().html() 以及 val() text() - 返回所选元素的文本内容 html() - 返回所选元素的内容(包括 HTML 标 ... 
- JavaScript(19)jQuery HTML 获取和设置内容和属性
		jQuery HTML jQuery 拥有可操作 HTML 元素和属性的强慷慨法. jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力.jQuery 提供一系列与 D ... 
- jQuery设置内容和属性方
		何问起 hovertree.com 设置内容 - text().html() 以及 val()text() - 设置或返回所选元素的文本内容html() - 设置或返回所选元素的内容(包括 HTML ... 
- jQuery - 获取/设置内容和属性
		获得内容 - text().html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元 ... 
- jQuery - 设置内容和属性  设置内容 - text()、html() 以及 val() ,   设置属性 - attr()
		jQuery - 设置内容和属性 设置内容 - text().html() 以及 val() text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTM ... 
- jquery操作html元素之(设置内容和属性)
		设置内容 - text().html() 以及 val() 我们将使用前一章中的三个相同的方法来设置内容: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容( ... 
- ZeroMQ接口函数之 :zmq_ctx_set - 设置环境上下文属性
		ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_set zmq_ctx_set(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_ct ... 
- 给li设置float浮动属性之后,无法撑开外层ul的问题。
		最近在项目中有好几次遇到这个问题,感觉是浮动引起的,虽然用<div style="clear:both"></div>解决了,但自己不是特别明白,又在网上查 ... 
随机推荐
- 七日筑基——C#第二天
			上一次讲到了变量,变量这个东西可以说是编程的基础,主要的作用就是用来存放数据,就跟做菜一样的,不同的菜要放在不同类型的容器中,那么不同的数据也需要存放在不同类型的变量里.先放张饭菜的图给大家看看,增加 ... 
- MD5随机散列加密算法
			项目中需要在登录验证用户名.密码的时候对密码进行加密处理,由于是比较商业化的软件,所以安全方面还是必须要考虑的.而使用MD5随机散列加密算法使得密码加密后不可逆,很大程度上提升了安全性.废话不多说,看 ... 
- iOS中运用正则表达式
			iOS中运用正则表达式来匹配短信验证码,电话号码,邮箱等是比较常见的. 在iOS中运用正则表达式主要有三种方式: -:通过谓词下面是实例代码: - (BOOL)regularExpresionWith ... 
- subversion和客户端的应用
			1.安装svn的服务器端subversion.以及windows客户端TortoiseSVN: 2 cmd 建立库,名字为svnpro ----- svnadmin create F:\svnpro, ... 
- Contributing to Open Source on GitHub(转)
			A great way to get involved in open source is to contribute to the existing projects you’re using. G ... 
- hrtimer 高精定时器使用例子
			在kernel,有个线程每个十秒往上层系统上报battery及USB的状态信息. 加入直接sleep 10 秒的话,插入USB的时候不能及时更新状态,这个时候就可以使用 hrtimer + wait ... 
- 转:alphaImageLoader滤镜加载后 链接不能点击
			我是一个很少使用IE滤镜,也是一个不赞成使用IE滤镜的前端工程师.不过今天有一个朋友给我发来了一个有关于IE6的BUG,就是在IE6中使用了AlphaPNG透明的IE滤镜之后,a链接不能够点击.具体情 ... 
- (C#)Windows Shell 编程系列2 - 解释,从“桌面”开始展开
			原文 (C#)Windows Shell 编程系列2 - 解释,从“桌面”开始展开 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一篇:(C#)Windows Shell 编 ... 
- BZOJ 3389: [Usaco2004 Dec]Cleaning Shifts安排值班
			题目 3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec Memory Limit: 128 MB Description ... 
- 第三章 线性表(C#实现)
			1.线性表 概念::零个或多个数据元素的有序序列. 描述: 2.线性表的抽象数据类型: ADT线性表 Data:线性表的数据对象集合为{a1,a2,...,an},每个元素的类型均为DataType. ... 
