对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
上一篇下一篇

猜你喜欢

热点阅读