1. UIButton的初认识

来自:http://www.cnblogs.com/mcj-coding/p/5103891.html QQ:853740091

1.1 UIButton 是iOS 开发中常用的控件之一,主要用于用户触摸屏幕触发相应的事件,比如你点击了app一个界面就会跳转到另一个界面,这个功能很有可能就是使用了UIButton.

UIButton 继承自UIControl类,UIControl类主要的作用是将复杂的触摸事件封装成了简单的易于使用的控件事件。例如通过UIControl对象处理后,按下按钮的事件就被封装成一个控件事件,而不用去判断触摸屏幕的整个操作过程。

2. UIButton的使用

2.1 自定义按钮

- (void)viewDidLoad

{

[super viewDidLoad];

// 创建自定义BUtton

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 200, 100, 50)];

// 设置button填充图片和背景图片

  [buttonsetImage:[UIImageimageNamed:@"checkmarkControllerIcon"]forState:UIControlStateNormal];

  [buttonsetBackgroundImage:[UIImageimageNamed:@"checkmarkControllerIcon"]forState:UIControlStateNormal];

  // 设置button标题和标题颜色

  [button1 setTitle:@"点击" forState:UIControlStateNormal];

  [buttonsetTitleColor:[UIColorredColor]forState:UIControlStateNormal];

  // 添加或删除事件处理

  [button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];

  [btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];

  //  设置按钮内部图片间距和标题间距

  UIEdgeInsets insets; // 设置按钮内部图片间距

  insets.top = insets.bottom = insets.right = insets.left = 10;

  bt.contentEdgeInsets = insets;

  bt.titleEdgeInsets = insets; // 标题间距

// 设置背景色

button.backgroundColor = [UIColor redColor];

// UIControlState 不同的状态 在不同的状态可以设置控件显示不同的样式

// enum {

// UIControlStateNormal = 0, 常规状态显现

// UIControlStateHighlighted = 1 << 0, 高亮状态显现

// UIControlStateDisabled = 1 << 1, 禁用的状态才会显现

// UIControlStateSelected = 1 << 2, 选中状态

// UIControlStateApplication = 0x00FF0000, 当应用程序标志时

// UIControlStateReserved = 0xFF000000 为内部框架预留,可以不管他

// };

// 设置标题

// 设置正常状态下的标题

[button setTitle:@"点我" forState:UIControlStateNormal];

// 设置高亮状态的标题

[button setTitle:@"点我了" forState:(UIControlStateHighlighted)];

// 设置禁用状态下的标题

[button setTitle:@"禁用" forState:UIControlStateDisabled];

button.enabled = YES;

// 设置不同状态下标题的颜色

[button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];

// 设置标题字体

button.titleLabel.font = [UIFont systemFontOfSize:20];

// 设置不同状态的图片

[button setImage:[UIImage imageNamed:@"dog.jpg"] forState:UIControlStateNormal];

[button setImage:[UIImage imageNamed:@"bug.jpg"] forState:UIControlStateHighlighted];

// 设置按钮为选中状态(YES 为选中状态 NO 为未选中状态)

button.selected = YES;

// UIControlEvents(不同的触发事件,可以设置这个控件在对应的触发条件下相应的事件)

//    UIControlEventTouchDown

//    单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。

//    UIControlEventTouchDownRepeat

//    多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。

//    UIControlEventTouchDragInside

//    当一次触摸在控件窗口内拖动时。

//    UIControlEventTouchDragOutside

//    当一次触摸在控件窗口之外拖动时。

//    UIControlEventTouchDragEnter

//    当一次触摸从控件窗口之外拖动到内部时。

//    UIControlEventTouchDragExit

//    当一次触摸从控件窗口内部拖动到外部时。

//

//    UIControlEventTouchUpInside

//    所有在控件之内触摸抬起事件。

//    UIControlEventTouchUpOutside

//    所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。

//    UIControlEventTouchCancel

//    所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。

//    UIControlEventTouchChanged

//    当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。

//    UIControlEventEditingDidBegin

//    当文本控件中开始编辑时发送通知。

//    UIControlEventEditingChanged

//    当文本控件中的文本被改变时发送通知。

//    UIControlEventEditingDidEnd

//    当文本控件中编辑结束时发送通知。

//    UIControlEventEditingDidOnExit

//    当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。

//    UIControlEventAlltouchEvents

//    通知所有触摸事件。

//    UIControlEventAllEditingEvents

//    通知所有关于文本编辑的事件。

//    UIControlEventAllEvents

//    通知所有事件。

// 注册事件(重点 这个就是设置点击按钮后要做什么操作)

// 第一个参数:接受消息的对象

// 第二个参数:被发送的消息

// 第三个参数:枚举,表示触发事件

// 事件传参的话 只能传自己

[button addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];

}

- (void)clickBtn

{

NSLog(@" 点击了按钮");

}

2.2 系统样式的按钮

  UIButton *button=[[UIButton buttonWithType:(UIButtonType);

button.frame = CGRectMake(10, 200, 100, 50);

  能够定义的button类型有以下6种,

  typedef enum {

  UIButtonTypeCustom = 0, 自定义风格

  UIButtonTypeRoundedRect, 圆角矩形

  UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用

  UIButtonTypeInfoLight, 亮色感叹号

  UIButtonTypeInfoDark, 暗色感叹号

  UIButtonTypeContactAdd, 十字加号按钮

  } UIButtonType;

2.3 按钮不同状态下外观微调

当按钮高亮或者禁用,UIButton 类可以调整自己的外观,下面几个属性可以让你按照需要对按钮的外观进行微调:
adjustsImageWhenHighlighted
默认情况下,在按钮被禁用时,图像会被画的颜色深一些。要禁用此功能,请将这个属性设置为NO:
btn1.adjustsImageWhenHighlighted = NO;

adjustsImageWhenDisabled
默认情况下,按钮在被禁用时,图像会被画的颜色淡一些。要禁用此功能,请将这个属性设置为NO:
btn1.adjustsImageWhenDisabled = NO;

showsTouchWhenHighlighted
这个
属性设置为YES,可令按钮在按下时发光。这可以用于信息按钮或者有些重要的按钮:
btn1.showsTouchWhenHighlighted = YES;

3. 自定义按钮内部的图片和文字的位置

你可以通过子类化按钮来定制属于你自己的按钮类。在子类化的时候你可以重载下面这些方法,这些方法返回CGRect结构,指明了按钮每一组成部分的边界。
注意:不要直接调用这些方法, 这些方法是你写给系统调用的。
backgroundRectForBounds   //指定背景边界 
contentRectForBounds // 指定内容边界 
titleRectForContentRect    // 指定文字标题边界 
imageRectForContentRect     //指定按钮图像边界

继承UIButton 设置里面图片和文字的位置

例如:设置一个图片在上,文字在下 都居中的按钮

#import <UIKit/UIKit.h>

@interface MCJButton : UIButton

@end

#import "MCJButton.h"

@implementation MCJButton

#pragma mark - 设置button内部图片的位置

- (CGRect)imageRectForContentRect:(CGRect)contentRect

{

CGFloat imageW = contentRect.size.width;

CGFloat imageH = contentRect.size.height * 0.7;

return CGRectMake(0, 0, imageW, imageH);

}

#pragma mark - 设置button内部labe的位置

- (CGRect)titleRectForContentRect:(CGRect)contentRect

{

CGFloat X = 0;

CGFloat Y = contentRect.size.height * 0.7;

CGFloat lableW = contentRect.size.width;

CGFloat lableH = contentRect.size.height * 0.3;

return CGRectMake(X, Y, lableW, lableH);

}

@end

使用:

MCJButton *btn = [[MCJButton alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];

[btn setImage:[UIImage imageNamed:@"button"] forState:UIControlStateNormal];

[btn setTitle:@"小红帽" forState:UIControlStateNormal];

[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];

btn.titleLabel.font = [UIFont systemFontOfSize:10];

// 图片居中

btn.imageView.contentMode = UIViewContentModeCenter;

// 文字居中

btn.titleLabel.textAlignment = NSTextAlignmentCenter;

[self.view addSubview:btn];

4. UIButton的使用的更多相关文章

  1. AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking

    AFNetworking的源码解读马上就结束了,这一篇应该算是倒数第二篇,下一篇会是对AFNetworking中的技术点进行总结. 前言 上一篇我们总结了 UIActivityIndicatorVie ...

  2. 记录下UIButton的图文妙用和子控件的优先显示

    UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景: 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面). 先上效果图: 1 ...

  3. iOS学习-UIButton的imageView和titleLabel

    UIButton的imageView和titleLabel的位置设置通过setImageEdgeInsets和setTitleEdgeInsets来设置 参考:http://blog.csdn.net ...

  4. iOS小知识:使UIButton中的图片和文字实现左对齐

    UIButton setImage 和 setTitle之后,默认的 image和title 对齐方式是居中, 由于 title 长度不固定,所以如果要几个这样有image有title的按钮纵向排列对 ...

  5. UIButton无法响应点击事件

    一.问题描述 因为项目需要,需要UITableView上添加固定的筛选表头,一直固定,不能随UITableView滚动.所以直接将表头与UITableView分离,将它添加到控制器的UIView上,即 ...

  6. 布局包含Image和Title的UIButton

    UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中image和title的布局. 如果对其理解不够深入,用纯数字进行布局管理,经过不断的调试,还是 ...

  7. UI控件(UIButton)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // UIButtonTypeCustom = 0, ...

  8. 自定义UIButton

    偶尔逛简书能看见很多值得记下来的东西,有的接触过有的没接触过,接触过的也可能过段时间就忘记了,再上手的时候可能手足无措,所以决定有些觉得值得记下来的东西还是记录一下.博客是个好地方,因为很多人都能搜索 ...

  9. UITableView或UIScrollVIew上的UIButton的高亮效果

    UITableView或UIScrollVIew上的UIButton的高亮效果 原文地址:http://www.jianshu.com/p/b4331f06bd34 最近做项目的时候发现,UIScro ...

  10. UIButton

    //UIButton->UIControl->UIView //UIControl 带有操作的控件都是继承于它的 //UIButton  实例化  类方法实例化 //实例化时没有位置及大小 ...

随机推荐

  1. 使用PhpDocumentor生成文档

    一,网站根目录执行 $ composer require --dev phpdocumentor/phpdocumentor 二,进入vendor/bin/目录执行 $phpdoc -d D:\ser ...

  2. 关于C#中readonly的一点小研究

    可能园子里有不少文章已经说明了这个问题了,但是我在这里写这篇博客只是写写自己的一些体会,也权当是整理归纳,高手莫见笑. ===============正文分割线================== 现 ...

  3. Sqlserver 语法总结

    修改列类型 alter table PRO_Element_b alter column matname varchar(1024) 更改一个表中的数据到另外一个表中 update a set a.n ...

  4. sql 关于查询时 出现的 从数据类型 varchar 转换为 numeric 时出错 的解决方法。

    出现这种问题 一般是查询时出现了 varchar 转 numeric 时出了错  或varchar字段运算造成的 解决方法: 让不能转的数不转换就可以了 sql的函数有个isNumeric(参数) 用 ...

  5. noip2016十连测round3

    A:平均数 题意:有一天,小 A 得到了一个长度为 n 的序列. 他把这个序列的所有连续子序列都列了出来,并对每一个子序列都求了其平均值,然后他把这些平均值写在纸上,并对它们进行排序,最后他报出了第 ...

  6. Linux 查找文件并删除文件内容

    find * ./ |while read file; do echo ''>$file; done

  7. 动态规划(DP)基础

    DP基础 简单dp 背包问题 记忆化搜索 简单dp 数字三角形 给一个数字构成的三角形,求从顶端走到底部的一条路径,使得路径上的和最大(或者最小). 1 2 3 6 5 4 Example_1 7 3 ...

  8. 海思h264解码库

    海思的dll,解码h264  解码后转出yuv12 dll自己百度下载  hi_h264dec.dll   hi_h264dec_w.dll   调用方法: if (H264Dec.Hi264DecA ...

  9. sde用户下使用sqlplus登录错误ORA-12547: TNS:lost contact

    环境:linux + oracle +arcsde   解决:root用户下增加$ORACLE_HOME/bin/oracle文件的s权限 [oracle@localhost bin]$ chmod ...

  10. Google Map API V3开发(4)

    Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...