对button更深层次的研究 详解
2017-05-27 本文已影响23人
WuNai
// Copyright (c) 2015年 wanghu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
/*
UIButton的类是一个UIControl子类,它实现了在触摸屏上的按钮
**/
/**
* 对button更深层次的研究
*
* @return return value description
*/
/**
* 在这里button的类型是一个结构体 有一下几种类型 UIButtonTypeCustom = 0, // no button type
UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), // standard system button
UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用
UIButtonTypeInfoLight, 亮色感叹号
UIButtonTypeInfoDark, //暗色感叹号
UIButtonTypeContactAdd, //十字加号按钮
UIButtonTypeRoundedRect = UIButtonTypeSystem,
*
* @return return value description
*/
UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];
button.frame=CGRectMake(100, 100, 200, 100);//button的位置和大小
/**
* UIControlStateNormal = 0, 正常状态
UIControlStateHighlighted = 1 << 0, // 高亮状态
UIControlStateDisabled = 1 << 1, //禁用状态
UIControlStateSelected = 1 << 2, // 选中状态
UIControlStateApplication = 0x00FF0000, // 用于应用程序额外的标志
UIControlStateReserved = 0xFF000000 // 用于内部框架的标志
*
* @return return value description
*/
[button setTitle:@"我是buttn的名字" forState:UIControlStateNormal];
[button setTitle:@"我是button的高亮模式" forState:UIControlStateHighlighted];
////返回在某个状态下,按钮标题的富文本
NSAttributedString *attributedString = [button attributedTitleForState:UIControlStateNormal];
/*
* 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no,
* 那么可以去掉这个功能
*/
button.adjustsImageWhenHighlighted = NO;
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
/*跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/
button.adjustsImageWhenDisabled = NO;
/* 下面的这个属性设置为yes的状态下,按钮按下会发光*/
button.showsTouchWhenHighlighted = YES;
/*
给button设置标签,用来辨别点击的是哪个button,常用在委托方法中。
**/
button.tag = 1;
//定义按钮标题字体格式
[button.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
//设置某个状态下按钮标题的阴影颜色
[button setTitleShadowColor:[UIColor grayColor] forState:UIControlStateNormal];
//给button添加图片
[button setBackgroundColor:[UIColor greenColor]];
[button setImage:[UIImage imageNamed:@"图片名字"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"背景图片名字"] forState:UIControlStateNormal];
/**
* / /添加目标为特定事件/行动。你可以多次调用这个,您可以指定多个目标为一个特定的事件/行动。
/ /传入nil作为目标上升响应者链。行动可以选择包括发送者和事件的顺序
/ /动作不能为空。注意,目标不是保留。
*
* @param ClickBtn
*
* @return 点击事件
*/
/**
UIControlEventTouchDown = 1 << 0, // 指鼠标左键按下(注:只是“按下”)的动作
UIControlEventTouchDownRepeat = 1 << 1, // 指鼠标左键连续多次重复按下(注:只是“按下”)的动作,比如,鼠标连续双击、三击、……、多次连击。说明:多次重复按下时,事件序列是这样的:
UIControlEventTouchDown ->
(UIControlEventTouchUpInside) ->
UIControlEventTouchDown ->
UIControlEventTouchDownRepeat ->
(UIControlEventTouchUpInside) ->
UIControlEventTouchDown ->
UIControlEventTouchDownRepeat ->
(UIControlEventTouchUpInside) ->
除了第一次按下外,后面每次摁下都是一个UIControlEventTouchDown事件,然后紧跟一个UIControlEventTouchDownRepeat事件。
UIControlEventTouchDragInside = 1 << 2, //指按下鼠标,然后在控件边界范围内拖动。
UIControlEventTouchDragOutside = 1 << 3, //与UIControlEventTouchDragInside不同的是,拖动时,鼠标位于控件边界范围之外。但首先得有个UIControlEventTouchDown事件,然后接一个UIControlEventTouchDragInside事件,再接一个UIControlEventTouchDragExit事件,这时,鼠标已经位于控件外了,继续拖动就是UIControlEventTouchDragOutside事件了。
具体操作是:在控件里面按下鼠标,然后拖动到控件之外
UIControlEventTouchDragEnter = 1 << 4, //指拖动动作中,从控件边界外到内时产生的事件。
UIControlEventTouchDragExit = 1 << 5, //指拖动动作中,从控件边界内到外时产生的事件。
UIControlEventTouchUpInside = 1 << 6, //指鼠标在控件范围内抬起,前提先得按下,即UIControlEventTouchDown或UIControlEventTouchDownRepeat事件。
UIControlEventTouchUpOutside = 1 << 7, //指鼠标在控件边界范围外抬起,前提先得按下,然后拖动到控件外,即 UIControlEventTouchDown -> UIControlEventTouchDragInside(n 个) -> UIControlEventTouchDragExit -> UIControlEventTouchDragOutside(n 个) 时间序列,再然后就是抬起鼠标,产生UIControlEventTouchUpOutside事件。
UIControlEventTouchCancel = 1 << 8, //所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。
UIControlEventValueChanged = 1 << 12, //当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。
UIControlEventEditingDidBegin = 1 << 16, // UITextField 当文本控件中开始编辑时发送通知。
UIControlEventEditingChanged = 1 << 17, //当文本控件中的文本被改变时发送通知。
UIControlEventEditingDidEnd = 1 << 18, //当文本控件中编辑结束时发送通知。
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing 当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。
UIControlEventAllTouchEvents = 0x00000FFF, // for touch events 通知所有触摸事件。
UIControlEventAllEditingEvents = 0x000F0000, // for UITextField通知所有关于文本编辑的事件。
UIControlEventApplicationReserved = 0x0F000000, // range available for application use
UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use
UIControlEventAllEvents = 0xFFFFFFFF //通知所有事件。
*/
[button addTarget:self action:@selector(TouchDown:)forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(TouchDownRepeat:)forControlEvents:UIControlEventTouchDownRepeat];
[button addTarget:self action:@selector(TouchDragInside:)forControlEvents:UIControlEventTouchDragInside];
[button addTarget:self action:@selector(TouchDragOutside:)forControlEvents:UIControlEventTouchDragOutside];
[button addTarget:self action:@selector(TouchDragEnter:)forControlEvents:UIControlEventTouchDragEnter];
[button addTarget:self action:@selector(TouchDragExit:)forControlEvents:UIControlEventTouchDragExit];
[button addTarget:self action:@selector(TouchUpInside:)forControlEvents:UIControlEventTouchUpInside];
[button addTarget:self action:@selector(TouchUpOutside:)forControlEvents:UIControlEventTouchUpOutside];
[button addTarget:self action:@selector(TouchCancel:)forControlEvents:UIControlEventTouchCancel];
/*
删除目标/一组事件的行动。传入NULL的行动来消除这一目标的所有操作
**/
// [button removeTarget:self action:@selector(removeClick:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:button];
}
-(void)removeClick:(id)sender
{
NSLog(@"删除目标/一组事件的行动。传入NULL的行动来消除这一目标的所有操作");
}
- (void)TouchDown:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchDownRepeat:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchDragInside:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchDragOutside:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchDragEnter:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchDragExit:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchUpInside:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchUpOutside:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)TouchCancel:(id)sender
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
/* 注意底下内容为机器翻译的内容 有兴趣的童鞋们可以看看
adjustsImageWhenDisabled
一个布尔值,决定是否形象的变化时,该按钮被禁用。
@属性(非原子)BOOL adjustsImageWhenDisabled讨论,如果是的话,图像绘制较深时,按钮被禁用。默认值是YES。
供货情况在iPhone OS 2.0和更高版本。另请参见
@财产adjustsImageWhenHighlighted
在UIButton.h宣布相关的示例代码BubbleLevel
[ 编辑 ]
adjustsImageWhenHighlighted
一个布尔值,决定是否按钮时,突出显示图像的变化。
@属性(非原子)BOOL adjustsImageWhenHighlighted讨论,如果是,绘制图像较轻的按钮时,突出显示。默认值是YES。
供货情况在iPhone OS 2.0和更高版本。另请参见
@财产adjustsImageWhenDisabled
在UIButton.h宣布相关的示例代码BubbleLevel
[ 编辑 ]
按钮类型
按钮类型。(只读)
@属性(非原子,只读)UIButtonType按钮类型的讨论,见UIButtonType的可能值。
供货情况在iPhone OS 2.0和更高版本。声明在UIButton.h
[ 编辑 ]
contentEdgeInsets
内容的插图或一开始就为每个边缘。
@属性(非原子)UIEdgeInsets contentEdgeInsets如果每条边的价值是积极的,指定的插图,否则,指定一开始。一个插图是周围绘制矩形的保证金;每边(左,右,顶部和底部),可以有不同的值。使用UIEdgeInsetsMake功能设置此属性。默认值是UIEdgeInsetsZero。
供货情况在iPhone OS 2.0和更高版本。另请参见
_AT_财产imageEdgeInsets
宣布UIButton.h currentBackgroundImage按钮上显示当前的背景图像。(只读)
@属性(只读,非原子,保留)的UIImage * currentBackgroundImage讨论这个值可以为零。
供货情况在iPhone OS 2.0和更高版本。另请参见
_AT_财产currentImage
声明在UIButton.h
[ 编辑 ]
currentImage
当前图像上显示的按钮。(只读)
@属性(只读,非原子,保留)的UIImage * currentImage讨论这个值可以为零。
供货情况在iPhone OS 2.0和更高版本。另请参见
_AT_财产currentBackgroundImage
声明在UIButton.h
[ 编辑 ]
currentTitle
当前标题,按钮上显示的。(只读)
@属性(只读,非原子,保留)的NSString * currentTitle讨论这个值可能为零。
供货情况在iPhone OS 2.0和更高版本。另请参见
@财产currentTitleColor财产currentTitleShadowColor
声明在UIButton.h
[ 编辑 ]
currentTitleColor
颜色用于显示标题。(只读)
@属性(只读,非原子,保留)UIColor * currentTitleColor讨论这个值是保证不会是零。默认值是白色。
供货情况在iPhone OS 2.0和更高版本。另请参见
@财产currentTitle财产currentTitleShadowColor
声明在UIButton.h
[ 编辑 ]
currentTitleShadowColor
标题的阴影的颜色。(只读)
@属性(只读,非原子,保留)UIColor * currentTitleShadowColor讨论默认值是白色。
供货情况在iPhone OS 2.0和更高版本。另请参见
@财产currentTitle财产currentTitleColor
声明在UIButton.h
[ 编辑 ]
字体
字体用来显示按钮上的文字。
@属性(非原子,保留)UIFont *字体的讨论,如果为零,使用系统字体。默认值是零。
供货情况在iPhone OS 2.0和更高版本。声明在UIButton.h
[ 编辑 ]
imageEdgeInsets
图像插图或一开始就为每个边缘。
@属性(非原子)UIEdgeInsets imageEdgeInsets如果每条边的价值是积极的,指定的插图,否则,指定一开始。一个插图是周围绘制矩形的保证金;每边(左,右,顶部和底部),可以有不同的值。使用UIEdgeInsetsMake功能设置此属性。默认值是UIEdgeInsetsZero。
供货情况在iPhone OS 2.0和更高版本。另请参见
_AT_财产titleEdgeInsets
声明在UIButton.h
[ 编辑 ]
lineBreakMode
绘制文本时使用的换行模式。
属性(非原子)UILineBreakMode lineBreakMode讨论这个属性是UILineBreakMode描述的常量之一。默认值是UILineBreakModeMiddleTruncation。
供货情况在iPhone OS 2.0和更高版本。在UIButton.h声明reversesTitleShadowWhenHighlighted一个布尔值,决定是否按钮时,突出的标题阴影的变化。
如果有属性(非原子)BOOL reversesTitleShadowWhenHighlighted讨论,从雕刻的影子时,突出浮雕外观的变化。默认值是NO。
供货情况在iPhone OS 2.0和更高版本。声明在UIButton.h
[ 编辑 ]
showsTouchWhenHighlighted
一个布尔值,决定是否点击按钮会导致其发光。
@属性(非原子)BOOL showsTouchWhenHighlighted讨论,如果是的话,按钮发光时挖掘出来,否则,它不会。图像和按钮的行为是没有改变的辉光。默认值是NO。
供货情况在iPhone OS 2.0和更高版本。另请参见
@财产adjustsImageWhenHighlighted
声明在UIButton.h
[ 编辑 ]
titleEdgeInsets
标题插图或一开始就为每个边缘。
@属性(非原子)UIEdgeInsets titleEdgeInsets如果每条边的价值是积极的,指定的插图,否则,指定一开始。一个插图是周围绘制矩形的保证金;每边(左,右,顶部和底部),可以有不同的值。使用UIEdgeInsetsMake功能设置此属性。默认值是UIEdgeInsetsZero。
供货情况在iPhone OS 2.0和更高版本。另请参见
_AT_财产imageEdgeInsets
声明在UIButton.h
[ 编辑 ]
titleShadowOffset
用于显示接收的标题阴影的偏移。
属性(非原子)CGSize titleShadowOffset讨论的水平和垂直偏移值,使用CGSize数据类型的宽度和高度场指定的。正面的价值观总是向上延伸的权利,从用户的角度来看。默认值是CGSizeZero。
供货情况在iPhone OS 2.0和更高版本。宣布UIButton.h类方法
buttonWithType:创建并返回一个指定类型的新按钮。
+(ID)buttonWithType:(UIButtonType)按钮类型
[ 编辑 ]
参数
[ 编辑 ]
按钮类型
按钮类型。见的可能值UIButtonType。
返回值一个新创建的按钮。
供货情况在iPhone OS 2.0和更高版本。相关的示例代码配件BubbleLevel TheElements TouchCells UICatalog宣布UIButton.h实例方法
[ 编辑 ]
backgroundImageForState:
返回一个按钮的状态中使用的背景图像。
- (UIImage的*)backgroundImageForState:(UIControlState)状态
参数状态的状态使用的背景图像。可能的值是在UIControlState描述。
返回值用于指定的状态背景图像。
供货情况在iPhone OS 2.0和更高版本。又见 - setBackgroundImage:forState:UIButton.h声明
[ 编辑 ]
backgroundRectForBounds:
返回矩形的接收绘制其背景。
- (CGRect)backgroundRectForBounds:(CGRect)边界
参数范围接收器的边界矩形。
返回值的矩形接收机,绘制其背景。
供货情况在iPhone OS 2.0和更高版本。又见 - contentRectForBounds:UIButton.h声明
[ 编辑 ]
contentRectForBounds:
返回矩形的接收提请其全部内容。
- (CGRect)contentRectForBounds:(CGRect)边界
参数限定为接收器的边界矩形。
返回值的矩形接收提请其全部内容。
讨论内容的矩形来显示图像和标题对齐和其他设置,包括任何填充和调整所需的面积。
供货情况在iPhone OS 2.0和更高版本。 - titleRectForContentRect: - imageRectForContentRect: - backgroundRectForBounds:UIButton.h imageForState中声明:返回一个按钮的状态所使用的图像。
- (UIImage的*)imageForState:(UIControlState)状态
参数状态使用图像的状态。可能的值是在UIControlState描述。
返回值用于指定状态的图像。
供货情况在iPhone OS 2.0和更高版本。又见 - setImage:forState:UIButton.h imageRectForContentRect宣布:返回接收绘制其图像的矩形。
- (CGRect)imageRectForContentRect:(CGRect)contentRect
参数contentRect接收的内容矩形。
返回值接收绘制其图像的矩形。
供货情况在iPhone OS 2.0和更高版本。又见 - contentRectForBounds: - titleRectForContentRect:forState::UIButton.h setBackgroundImage宣布设置背景图像使用指定的按钮状态。
- (无效)setBackgroundImage:(UIImage的*)图像forState:(UIControlState)状态
参数图像背景图像使用指定的状态。
状态的状态使用指定的图像。在UIControlState值的描述。
在一般性讨论,如果没有一个国家指定一个属性,默认是使用UIControlStateNormal的价值。如果UIControlStateNormal值未设置,则属性默认为一个系统的价值。因此,至少,你应该设置为正常状态的价值。
供货情况在iPhone OS 2.0和更高版本。又见 - backgroundImageForState:相关示例代码配件BubbleLevel TheElements UICatalog UIButton.h setImage宣布:forState:设置图像使用指定的状态。
- (无效)setImage:(UIImage的*)图像forState:(UIControlState)状态
参数图像的图像使用指定的状态。
状态的状态使用指定的标题。在UIControlState值的描述。
在一般性讨论,如果没有一个国家指定一个属性,默认是使用UIControlStateNormal的价值。如果UIControlStateNormal值未设置,则属性默认为一个系统的价值。因此,至少,你应该设置为正常状态的价值。
供货情况在iPhone OS 2.0和更高版本。又见 - imageForState:forState::相关示例代码BubbleLevel在UIButton.h setTitle声明TouchCells设置标题使用指定的状态。
- (无效)setTitle是:(NSString的*)forState标题:(UIControlState)状态
参数标题标题使用指定的状态。
状态的状态使用指定的标题。在UIControlState值的描述。
在一般性讨论,如果没有一个国家指定一个属性,默认是使用UIControlStateNormal的价值。如果UIControlStateNormal价值不设置,则属性默认为系统值。因此,至少,你应该设置为正常状态的价值。
供货情况在iPhone OS 2.0和更高版本。又见 - titleForState:UIButton.h setTitleColor:forState相关的示例代码BubbleLevel UICatalog宣布:设置标题使用指定的状态的颜色。
- (无效)setTitleColor:(UIColor *)颜色forState:(UIControlState)状态
参数颜色的标题使用指定的状态的颜色。
状态的状态使用指定的颜色。在UIControlState值的描述。
在一般性讨论,如果没有一个国家指定一个属性,默认是使用UIControlStateNormal的价值。如果UIControlStateNormal值未设置,则属性默认为一个系统的价值。因此,至少,你应该设置为正常状态的价值。
供货情况在iPhone OS 2.0和更高版本。又见 - titleColorForState:UIButton.h setTitleShadowColor:forState相关的示例代码BubbleLevel UICatalog宣布:设置标题阴影的颜色,使用指定的状态。
- (无效)setTitleShadowColor:(UIColor *)颜色forState:(UIControlState)状态
参数颜色的标题阴影的颜色,使用指定的状态。
状态的状态使用指定的颜色。在UIControlState值的描述。
在一般性讨论,如果没有一个国家指定一个属性,默认是使用UIControlStateNormal的价值。如果UIControlStateNormal值未设置,则属性默认为一个系统的价值。因此,至少,你应该设置为正常状态的价值。
供货情况在iPhone OS 2.0和更高版本。又见 - titleShadowColorForState:UIButton.h titleColorForState宣布:返回一个国家使用的标题的颜色。
- (UIColor *)titleColorForState:(UIControlState)状态
参数状态的国家,使用的标题颜色。可能的值是在UIControlState描述。
返回值指定的状态标题的颜色。
供货情况在iPhone OS 2.0和更高版本。又见 - setTitleColor:forState:UIButton.h titleForState宣布:返回一个国家所使用的标题。
- (NSString的*)titleForState:(UIControlState)状态
参数状态的国家,使用的标题。可能的值是在UIControlState描述。
返回值指定的状态标题。
供货情况在iPhone OS 2.0和更高版本。又见 - setTitle:forState:UIButton.h titleRectForContentRect宣布:返回矩形的接收器绘制它的标题。
- (CGRect)titleRectForContentRect:(CGRect)contentRect
参数contentRect接收的内容矩形。
返回值的矩形接收器绘制它的标题。
供货情况在iPhone OS 2.0和更高版本。又见 - contentRectForBounds: - imageRectForContentRect:UIButton.h titleShadowColorForState宣布:返回的阴影颜色为国家所用的标题。
- (UIColor *)titleShadowColorForState:(UIControlState)状态
参数状态的国家,使用的标题阴影颜色。可能的值是在UIControlState描述。
返回值指定的状态标题的影子颜色。
供货情况在iPhone OS 2.0和更高版本。又见 - setTitleShadowColor:forState:UIButton.h常量声明
UIButtonType指定一个按钮的风格。
的typedef枚举{
UIButtonTypeCustom = 0,UIButtonTypeRoundedRect,UIButtonTypeDetailDisclosure,UIButtonTypeInfoLight,UIButtonTypeInfoDark,UIButtonTypeContactAdd
} UIButtonType;常量UIButtonTypeCustom无按钮的样式。
**/
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end