4. UIButton的使用
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的使用的更多相关文章
- AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking
AFNetworking的源码解读马上就结束了,这一篇应该算是倒数第二篇,下一篇会是对AFNetworking中的技术点进行总结. 前言 上一篇我们总结了 UIActivityIndicatorVie ...
- 记录下UIButton的图文妙用和子控件的优先显示
UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景: 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面). 先上效果图: 1 ...
- iOS学习-UIButton的imageView和titleLabel
UIButton的imageView和titleLabel的位置设置通过setImageEdgeInsets和setTitleEdgeInsets来设置 参考:http://blog.csdn.net ...
- iOS小知识:使UIButton中的图片和文字实现左对齐
UIButton setImage 和 setTitle之后,默认的 image和title 对齐方式是居中, 由于 title 长度不固定,所以如果要几个这样有image有title的按钮纵向排列对 ...
- UIButton无法响应点击事件
一.问题描述 因为项目需要,需要UITableView上添加固定的筛选表头,一直固定,不能随UITableView滚动.所以直接将表头与UITableView分离,将它添加到控制器的UIView上,即 ...
- 布局包含Image和Title的UIButton
UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中image和title的布局. 如果对其理解不够深入,用纯数字进行布局管理,经过不断的调试,还是 ...
- UI控件(UIButton)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // UIButtonTypeCustom = 0, ...
- 自定义UIButton
偶尔逛简书能看见很多值得记下来的东西,有的接触过有的没接触过,接触过的也可能过段时间就忘记了,再上手的时候可能手足无措,所以决定有些觉得值得记下来的东西还是记录一下.博客是个好地方,因为很多人都能搜索 ...
- UITableView或UIScrollVIew上的UIButton的高亮效果
UITableView或UIScrollVIew上的UIButton的高亮效果 原文地址:http://www.jianshu.com/p/b4331f06bd34 最近做项目的时候发现,UIScro ...
- UIButton
//UIButton->UIControl->UIView //UIControl 带有操作的控件都是继承于它的 //UIButton 实例化 类方法实例化 //实例化时没有位置及大小 ...
随机推荐
- iOS中UI阶段常用的一些方法
UI 即 UserInterface(用户界面 1.iOS系统版本,每年都有更新.对我们开发者而言,主要的是观察API的变化. 2.iPhone新手机发布,会产生不同尺寸的屏幕,现在市面上有4种尺寸, ...
- JQuery 获得div绝对,相对位置的坐标方法
获取页面某一元素的绝对X,Y坐标 var X = $('#DivID').offset().top; var Y = $('#DivID').offset().left; 获取相对(父元素)位置: v ...
- 线段树 HDU 3308
t 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y 2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 #include< ...
- Android Studio导入第三方jar包
直接将jar包拷贝到app/libs下,然后在app下的build.gradle中添加此jar的依赖.如下: dependencies { compile fileTree(dir: 'libs', ...
- 问你觉得iOS7为什么要扁平化,扁平化和之前的比有什么优势
问你觉得iOS7为什么要扁平化,扁平化和之前的比有什么优势 苹果首席设计师谈为何会在iOS上选择扁平风格http://ndnews.oeeee.com/html/201306/11/71078.htm ...
- 创建一个点状注记(MarkerElement)
1.根据XY创建一个点 /// <summary> /// 根据x y创建新点 /// </summary> /// <param name="dX" ...
- Python学习笔记——集合类型
集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...
- Redis总结(四)Redis 的持久化
前面已经总结了Redis 的安装和使用今天讲下Redis 的持久化. redis跟memcached类似,都是内存数据库,不过redis支持数据持久化,也就是说redis可以将内存中的数据同步到磁盘来 ...
- 基于 BinaryReader 的高效切割TXT文件
日常工作中免不了要面对一些文件的操作.. 但是如果是日志文件..动辄上G的..处理起来就不那么轻松随意了.. 尤其文件还很多的时候.. 这个时候就会用到大文件切割.. 下边贴出的示例是实验了一个 10 ...
- Extjs 学习总结-代理
代理(proxy)是用来加载和存取Model 数据的.开发中一般配合Store完成工作,不会直接操作代理. 代理分为两大类: 客户端代理 服务器代理 客户端代理主要完成与浏览器本地存储数据相关的工作. ...