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. matlab 将多个盒图放在一张图上

    1.boxplot 将多个盒图放在一张图上 x1 = normrnd(5,1,100,1)';x2 = normrnd(6,1,200,1)';X = [x1 x2];G = [zeros(size( ...

  2. Css-深入学习之弧形切角矩形

    本文是作者从别的网站和文章学习了解的知识,简单做了个笔记,想要学习更多的可以参考这里:[css进阶]伪元素的妙用--单标签之美,奇思妙想 (弧形切角矩形) 代码: width: 180px; heig ...

  3. C++标准库:std_map作为一个关联数组

    摘要:std::map作为一个容器存在一个典型应用就是作为关联数组来作用.在诸如Java等等语言中,关联数组广泛存在.std::map是一个容器,在它的概念框架中存在两个词:键和值,std::map把 ...

  4. hashlib 和 hmac

    import hashlib hash = hashlib.md5([bytes('SALT_STRING', encoding='utf-8’)]) #SALT_STRING :加盐 hash.up ...

  5. jinfo_动态调整JVM参数(无需重启)(实践)

    ​本文演示在JVM进程运行过程中动态开启/关闭 GC输出,无需重启JVM进程 jinfo使用介绍 可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数 -flag < ...

  6. Android Studio导入第三方jar包

    直接将jar包拷贝到app/libs下,然后在app下的build.gradle中添加此jar的依赖.如下: dependencies { compile fileTree(dir: 'libs', ...

  7. Cocos2d-X3.0 刨根问底(四)----- 内存管理源码分析

    本系列文章发表以来得到了很多朋友的关注,小鱼在这里谢谢大家对我的支持,我会继续努力的,最近更新慢了一点,因为我老婆流产了抽了很多时间来照顾她希望大家谅解,并在此预祝我老婆早日康复. 上一篇,我们完整的 ...

  8. android 手机去哪儿7.2版本客户端 账号存储信息分析

    1.data/data/com.qunar sharepref 文件夹下的Qunarperferences.xml文件中 username,phone等均为加密处理过字段   2.jdgui下查找关键 ...

  9. MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  10. <!DOCTYPE>标签的定义与用法

    <!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令. 在 HTML 4.01 中,<!DOCTYPE> 声明 ...