(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的设置及各种属性的更多相关文章

  1. 为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性

    为什么button在设置标题时要用一个方法.而不像lable一样直接用一个属性 原因是有时我们对      button做一次点击,须要改变button的标题.仅仅实用方法才干做到,而label是标签 ...

  2. JQUERY操作html--获取和设置内容、属性、回调函数

    一:jQuery - 获取内容和属性 1.获得内容 - text().html() 以及 val() text() - 返回所选元素的文本内容 html() - 返回所选元素的内容(包括 HTML 标 ...

  3. JavaScript(19)jQuery HTML 获取和设置内容和属性

    jQuery HTML jQuery 拥有可操作 HTML 元素和属性的强慷慨法. jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力.jQuery 提供一系列与 D ...

  4. jQuery设置内容和属性方

    何问起 hovertree.com 设置内容 - text().html() 以及 val()text() - 设置或返回所选元素的文本内容html() - 设置或返回所选元素的内容(包括 HTML ...

  5. jQuery - 获取/设置内容和属性

    获得内容 - text().html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元 ...

  6. jQuery - 设置内容和属性 设置内容 - text()、html() 以及 val() , 设置属性 - attr()

    jQuery - 设置内容和属性  设置内容 - text().html() 以及 val() text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTM ...

  7. jquery操作html元素之(设置内容和属性)

    设置内容 - text().html() 以及 val() 我们将使用前一章中的三个相同的方法来设置内容: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容( ...

  8. 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 ...

  9. 给li设置float浮动属性之后,无法撑开外层ul的问题。

    最近在项目中有好几次遇到这个问题,感觉是浮动引起的,虽然用<div style="clear:both"></div>解决了,但自己不是特别明白,又在网上查 ...

随机推荐

  1. vim之执行shell命令

    vim中执行shell命令,有以下几种形式 (1) :!command 不退出vim, 并执行shell命令command, 将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容 (2)   ...

  2. ZOJ 3080 ChiBi(spfa)

    ZOJ Problem Set - 3080 ChiBi Time Limit: 5 Seconds      Memory Limit: 32768 KB watashi's mm is so pr ...

  3. C# 获得当前应用程序路径

    1.获得当前应用程序的路径最稳定的方法:AppDomain.CurrentDomain.BaseDirectory 生成的路径:../项目名称/bin/Debug下的路径

  4. 五毛的cocos2d-x学习笔记07-计时器、数据读写、文件读写

    调度器: 定时任务是通过调度器实现的.cocos2d-x推荐用调度器而不是其他方法实现定时任务.Node类都知道如何调度和取消调度事件. 有3种调度器: 默认调度器:schedulerUpdate() ...

  5. iOS自动自动隐藏软键盘

    自动隐藏软键盘,分为两步,一个是单击软键盘外部任意空间:另外一个是单击软键盘上的return键.下面依次实现 单击软键盘外部空间键隐藏软键盘: 一:在viewDidLoad中添加一个UITabGest ...

  6. 用CSS样式画横线和竖线的方法

    今天在做网页的时候,需要用到CSS画横线,虽然比较简单,但也出了一些小问题,拿来做个备忘. 方法一:用DIV,代码如下:(推荐此方法)     <div style="width:80 ...

  7. kinect for windows - SkeletonBasics-D2D详解之一

    之前的文章介绍了深度图的获取,但是深度图只是提供了一些数据,这些数据给上层应用使用还是偏底层一些,我们希望在这个基础上,获取一些信息,比如手挥动,人跑步,或者运动等等,那么这个文章开始我们来讲述kin ...

  8. BZOJ 1000 A+B Problem (I/O)

    #include<cstdio> int main(){ int a,b; scanf("%d%d",&a,&b); printf("%d&q ...

  9. apache添加fastcgi支持

    A,安装apache服务器和fastcgi模块支持(ubuntu测试) sudo apt-get install apache2 sudo apt-get install libapache2-mod ...

  10. 百度——LBS.云 v2.0——云存储的POI创建和删除--Android 源码

    如有疑问请联系:QQ936467727 需要注意的几点问题: 1.密钥是http://lbsyun.baidu.com/apiconsole/key申请的,密钥类型是浏览器端 2.geotable_i ...