UIButton详细介绍及注意事项

按钮UIButton是ios开发中最常见的控件之一,下面来介绍UIButton的详细内容,及开发中需要注意的问题。

UIButton简介:

使用目标动作设计模式,target-action模式,3种回调的模式之一。

实现原理:

使用下面的方法封装,根据用户的点击移动等动作

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

创建按钮:

//构造器方法,调用该方法创建某个样式的按钮对象
+ (id)buttonWithType:(UIButtonType)buttonType

参数:
buttonType:按钮样式
枚举值:
UIButtonTypeCustom = 0, 自定义风格
UIButtonTypeRoundedRect, 圆角矩形
UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用
UIButtonTypeInfoLight, 亮色感叹号
UIButtonTypeInfoDark, 暗色感叹号
UIButtonTypeContactAdd, 十字加号按钮


UIButtonTypeSystem ,系统默认样式,若使用此样式,在使用setImage时会显示异常

示例:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

配置按钮标题

//获取按钮的标题文字,只读属性
@property(nonatomic, readonly, retain) UILabel *titleLabel,注意请勿直接使用titleLabel来修改title
//返回在某个状态下,按钮的标题文字
- (NSString *)titleForState:(UIControlState)state

参数:
state:控件状态
枚举值:
UIControlStateNormal                //常规状态显现
UIControlStateHighlighted           //高亮状态显现
UIControlStateDisabled              //禁用的状态才会显现
UIControlStateSelected              //选中状态 UIControlStateApplication            //当应用程序标志时
UIControlStateReserved              //为内部框架预留,可以不管他
返回值:此状态下按钮的标题文字

示例:
NSString *title = [button titleForState:UIControlStateNormal];
//设置按钮在某个状态下的标题文字
- (void)setTitle:(NSString *)title
        forState:(UIControlState)state

示例:
[button setTitle:@"按钮" forState:UIControlStateNormal];
//返回在某个状态下,按钮标题的富文本
- (NSAttributedString *)attributedTitleForState:(UIControlState)state

参数:
state:控件的状态
返回值:富文本
NSAttirbutedString 为富文本,详情参见NSAttirbutedString文档

示例:
NSAttributedString *attributedString = [button attributedTitleForState:UIControlStateNormal];
//设值按钮在某个状态下的富文本标题
- (void)setAttributedTitle:(NSAttributedString *)title
                  forState:(UIControlState)state
//返回按钮在某个状态下的标题颜色
- (UIColor *)titleColorForState:(UIControlState)state

参数:
state:状态
返回值:颜色

示例:
UIColor *color = [button titleColorForState:UIControlStateNormal];
//设置按钮标题的颜色
- (void)setTitleColor:(UIColor *)color
             forState:(UIControlState)state

参数:
color:颜色描述对象
state:状态

示例:
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//返回某个状态下按钮标题的阴影颜色
- (UIColor *)titleShadowColorForState:(UIControlState)state
//设置某个状态下按钮标题的阴影颜色
- (void)setTitleShadowColor:(UIColor *)color
                   forState:(UIControlState)state

参数:
color:颜色描述对象
state:状态

示例:
[button setTitleShadowColor:[UIColor grayColor] forState:UIControlStateNormal];
//标题的阴影改变时,按钮是否高亮显示。默认为NO
@property(nonatomic) BOOL reversesTitleShadowWhenHighlighted

配置按钮演示

//按钮高亮的情况下,图像的颜色是否要加深一点。默认是YES
@property(nonatomic) BOOL adjustsImageWhenHighlighted
//按钮禁用的情况下,图像的颜色是否要加深一点。默认是YES
@property(nonatomic) BOOL adjustsImageWhenDisabled
//按下按钮是否会发光。默认是NO
@property(nonatomic) BOOL showsTouchWhenHighlighted
//返回按钮在某个状态下的背景图片
- (UIImage *)backgroundImageForState:(UIControlState)state

参数:
state:状态
返回值:背景图像

示例:
UIImage *image = [button backgroundImageForState:UIControlStateNormal];
//获取按钮的填充图片
- (UIImage *)imageForState:(UIControlState)state
//设置按钮的背景图片
- (void)setBackgroundImage:(UIImage *)image
                  forState:(UIControlState)state

参数:
image:背景图片
state:状态

示例:
[button setBackgroundImage:image forState:UIControlStateNormal];
//设置按钮的填充图片
- (void)setImage:(UIImage *)image
        forState:(UIControlState)state

配置按钮边框效果

//设置按钮的内部内容(包含按钮图片和标题)离按钮边缘上下左右的距离。
@property(nonatomic) UIEdgeInsets contentEdgeInsets

结构体:
CGFloat top, left, bottom, right;
四个值,分别是上左下右
//设置按钮的内部标题离按钮边缘上下左右的距离
@property(nonatomic) UIEdgeInsets titleEdgeInsets
//设置按钮的内部图片离按钮边缘上下左右的距离
@property(nonatomic) UIEdgeInsets imageEdgeInsets

获取按钮当前状态(只读)

//获取按钮状态,只读属性
@property(nonatomic, readonly) UIButtonType buttonType
//获取按钮当前标题,只读属性
@property(nonatomic, readonly, retain) NSString *currentTitle
//获取按钮当前的富文本标题
@property(nonatomic, readonly, retain) NSAttributedString *currentAttributedTitle
//获取当前标题的颜色
@property(nonatomic, readonly, retain) UIColor *currentTitleColor
//获取当前标题的阴影颜色
@property(nonatomic, readonly, retain) UIColor *currentTitleShadowColor
//获取当前按钮的图片
@property(nonatomic, readonly, retain) UIImage *currentImage
//获取当前按钮的背景图片
@property(nonatomic, readonly, retain) UIImage *currentBackgroundImage
//获取当前按钮的图片框对象
@property(nonatomic, readonly, retain) UIImageView *imageView

重写绘制行为

你可以通过子类化按钮来定制属于你自己的按钮类。在子类化的时候你可以重载下面这些方法,这些方法返回CGRect结构,指明了按钮每一组成部分的边界。

注意:不要直接调用这些方法, 这些方法是你写给系统调用的。

//指定背景边界
- (CGRect)backgroundRectForBounds:(CGRect)bounds
//指定内容边界
- (CGRect)contentRectForBounds:(CGRect)bounds
//指定文字标题边界
- (CGRect)titleRectForContentRect:(CGRect)contentRect
//指定按钮图像边界
- (CGRect)imageRectForContentRect:(CGRect)contentRect

示例:
- (CGRect)imageRectForContentRect:(CGRect)bounds{
        return CGRectMake(0.0, 0.0, 44, 44);
    }

事件

//给按钮添加点击事件
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];

枚举值:
UIControlEventTouchDown                 // 单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。
    UIControlEventTouchDownRepeat       // 多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
    UIControlEventTouchDragInside       // 当一次触摸在控件窗口内拖动时。
    UIControlEventTouchDragOutside      // 当一次触摸在控件窗口之外拖动时。
    UIControlEventTouchDragEnter        // 当一次触摸从控件窗口之外拖动到内部时
    UIControlEventTouchDragExit         // 当一次触摸从控件窗口内部拖动到外部时。
    UIControlEventTouchUpInside         // 所有在控件之内触摸抬起事件
    UIControlEventTouchUpOutside        // 所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。
    UIControlEventTouchCancel           //所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。

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

    UIControlEventEditingDidBegin       // 当文本控件中开始编辑时发送通知
    UIControlEventEditingChanged        // 当文本控件中的文本被改变时发送通知。
    UIControlEventEditingDidEnd         // 当文本控件中编辑结束时发送通知。
    UIControlEventEditingDidEndOnExit   // 当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。

    UIControlEventAllTouchEvents        // 通知所有触摸事件。
    UIControlEventAllEditingEvents      // 通知所有关于文本编辑的事件。
    UIControlEventApplicationReserved   // range available for application use
    UIControlEventSystemReserved        // range reserved for internal framework use
    UIControlEventAllEvents             // 通知所有事件

复选框checkBox的实现:

首先给选中,何不选中的时候设置背景图片

点击按钮的时候,取反selected值即可

利用selected状态,反选即可

示例代码:

-(void)checkboxClick:(UIButton *)btn
{
    btn.selected = !btn.selected;
}

- (void)viewDidLoad {
UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom];

    CGRect checkboxRect = CGRectMake(135,150,36,36);
    [checkbox setFrame:checkboxRect];

    [checkbox setImage:[UIImage imageNamed:@"checkbox_off.png"] forState:UIControlStateNormal];
    [checkbox setImage:[UIImage imageNamed:@"checkbox_on.png"] forState:UIControlStateSelected];

    [checkbox addTarget:self action:@selector(checkboxClick:) forControlEvents:UIControlEventTouchUpInside];
   [self.view addSubview:checkbox];
}

原文来自:http://blog.csdn.net/yangbingbinga/article/details/43320625

时间: 2024-10-11 02:56:08

UIButton详细介绍及注意事项的相关文章

iOS开发——Swift篇&Swift关键字详细介绍

Swift关键字详细介绍 每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension, func, import, init, let, protocol, static, struct, subscript, typealias, var.” 用于子句的: “ break, case, continue, default, do, else, fallthrough, if, i

ios开发——实用技术篇&Pist转模型详细介绍

Pist转模型详细介绍 关于Plist转模型在iOS开发中是非常常见的,每开一一个项目或者实现一个功能都要用到它,所以今天就给大家讲讲Plist怎么转成模型数据, 前提:必须有一个Plist文件或者通过一定的方式返回的plist数据 一:直接加载Plist数据 1 //定义一个数组属性 2 @property (nonatomic, assign) NSArray *apps; 获取Plist文件 1 //懒加载plist文件,返回一个apps数据,后面直接使用旧可以 2 -(NSArray *

海峡装饰:招标投标公证程序详细介绍

投标人应当按照招标文件要求的方式和金额,将投标保证金随投标文件提交给招标人. 投标人不按招标文件要求提交投标保证金的,该投标文件将被拒绝,作废标处理. 投标人应当在招标文件要求提交投标文件的截止时间前,将投标文件密封送达投标地点.招标人收到投标文件后,应 当向投标人出具标明签收人和签收时间的凭证,在开标前任何单位和个人不得开启投标文件. 在招标文件要求提交投标文件的截止时间后送达的投标文件,为无效的投标文件,招标人应当拒收. 提交投标文件的投标人少于三个的,招标人应当依法重新招标.重新招标后投标

Autolayout使用详细介绍

关于Autolayout的初步介绍 说道Autolayout,我也是在iPhone 6 And 6+ 出来之后才开始关注的.我是一个纯代码程序者之前. 那个时候有听说到Xib和Storyboard(现在Xib已经使用的少了,下面直接说storyboard.其实Xib和storyboard只是父子的关系嘛),我开始在网上查找资料,网上给的解释我总结给大家如下: 1.代码是storyboard的升级.就是说,代码比storyboard牛逼啦.这种说法是这样来的:许多IOS开发者,都是在Xib的引导下

微铺子点单系统详细介绍 - 争做国内最专业的微信商店平台,微信外卖订餐系统!

什么是微铺子? 微铺子是国内专业的微信点单系统,集成了外卖.点餐.订座等众多功能.通过微铺子,店家可以在微信上建立店铺,消费者只需关注店家的帐号,即可浏览商品与店家的信息,消费者关注到商家后,根据提示,进行点击点单,简单三步,15秒内,即可完成订餐.店家可以通过电脑后台.电子邮件.短信或无线打印机多种方式即时查看订单,并提供相应的服务. 微铺子系统适用于:餐饮.酒店.水果店.蛋糕店.花店.零售.超市等. 微铺子从创立到与合作商家的长期测试,再到正式投入商用,期间不断根据客户的需求完善产品,不断开

自动化运维工具ansible详细介绍

在学习批量管理软件时,首先要明确的知道自己需要什么,网上大神很多,他们都研究到源码上了,写了很多介绍绚丽功能的文档,但其实那些功能基本上我们都用不到,经常被各种文档弄得头脑发晕,此文就是为了简单直白的告诉大家ansible的功能,满足大家的基本需求. 首先确认批量管理我们需要什么:无外乎主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 目录 1.      ansible与saltstack对比... 2.      ansible安装... 3.      ans

详细介绍spring框架(下篇)

上篇简单介绍了spring,下面详细介绍为什么需要spring框架? Spring带给我们什么 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合.有了Spring,用户不必再为单实例模式类.属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用. AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付. 声明式事务的支持 在

TTL,COMS,USB,232,422,485电平之详细介绍及使用

如有错误敬请指导! 今天来详细介绍一下TTL,COMS,USB,232,422,485电平,以及之间的转换问题. 有些地方的引脚图可能不是规范的,具体引脚以自己的模块资料为主,这篇文章着重介绍使用... 先介绍各个电平 TTL电平------我们使用的51单片机,5V供电的那种,+5V等价于逻辑“1”,0V等价于逻辑“0”,“TTL电平”最常用于有关电专业,如:电路.数字电路.微机原理与接口技术.单片机等课程中都有所涉及.在数字电路中只有两种电平(高和低)高电平+5V.低电平0V. COMS电平

RAID详细介绍

RAID详细介绍 RAID 0 又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能.RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求.这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能 RAID 1又称为Mirror或Mirroring,它的宗旨是最大限度的保证用户数据的可用性和可修复性.RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复