[置顶] iOS学习之——UIButton详解

UIButton详解:
一、UIButton的定义
两种创建方法
(1)常规的initWithFrame的方式

UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(100, 50, 100, 75)];
[btn1 setTitle:@"close" forState:UIControlStateNormal];
btn1.backgroundColor = [UIColor greenColor];//button的背景颜色
[btn1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];//button的背景图片

(2)UIButton 的一个类方法(也可以说是静态方法)buttonWithType

UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];//创建一个圆角矩形的按钮
btn2.frame = CGRectMake(200, 20, 50, 60);
btn2.backgroundColor = [UIColor blackColor];
[btn2 setTitle:@"clicke" forState:UIControlStateNormal];
[self.window addSubview:btn1];
[self.window addSubview:btn2];

//创建一个自定义的按钮

   UIButton *button1=[UIButton buttonWithType:UIButtonTypeCustom];

能够定义的button类型有以下6种,

  typedef enum {
       UIButtonTypeCustom = 0,          自定义风格
       UIButtonTypeRoundedRect,         圆角矩形
       UIButtonTypeDetailDisclosure,    蓝色小箭头按钮,主要做详细说明用
       UIButtonTypeInfoLight,           亮色感叹号
       UIButtonTypeInfoDark,            暗色感叹号
       UIButtonTypeContactAdd,          十字加号按钮
     } UIButtonType;

二、设置frame

    //给定button在view上的位置
    button1.frame = CGRectMake(20, 20, 280, 20);
    [button setFrame:CGRectMake(20,20,50,50)];

三、button背景色

    //button背景色
    button1.backgroundColor = [UIColor clearColor];

    [button setBackgroundColor:[UIColor blueColor]];

五、设置button填充图片和背景图片

    //设置button填充图片和背景图片
    [button1 setImage:[UIImage imageNamed:@"btng.png"] forState:UIControlStateNormal];

    [button setBackgroundImage:[UIImageimageNamed:@"btng.png"]forState:UIControlStateNormal];

六、设置button标题和标题颜色

    //设置button标题和标题颜色
    [button1 setTitle:@"点击" forState:UIControlStateNormal];

    [button setTitleColor:[UIColorredColor]forState:UIControlStateNormal];

    [button setTitleShadowColor:[UIColor grayColor] forState:UIControlStateNormal ]; //阴影

七、state状态
forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现
以下是几种状态

    enum {
        UIControlStateNormal       = 0,         常规状态显现             
        UIControlStateHighlighted  = 1 << 0,    高亮状态显现   
        UIControlStateDisabled     = 1 << 1,    禁用的状态才会显现
        UIControlStateSelected     = 1 << 2,    选中状态             
        UIControlStateApplication  = 0x00FF0000, 当应用程序标志时           
        UIControlStateReserved     = 0xFF000000  为内部框架预留,可以不管他            
    };                     
    @property(nonatomic,getter=isEnabled)BOOL enabled; // default is YES. if NO, ignores touch events and subclasses may draw differently

    @property(nonatomic,getter=isSelected)BOOL selected;  // default is NO may be used by some subclasses or by application

    @property(nonatomic,getter=isHighlighted)BOOL highlighted;     

八、设置按钮按下是否颜色变深

   /* * 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no, * 那么可以去掉这个功能 */
    button1.adjustsImageWhenHighlighted = NO;
   /*跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/
    button1.adjustsImageWhenDisabled = NO;

九、设置按钮按下会发光

   /* 下面的这个属性设置为yes的状态下,按钮按下会发光*/
    button1.showsTouchWhenHighlighted = YES;

十、添加或删除事件处理

   /* 给button添加事件,事件有很多种 按下按钮,并且手指离开屏幕的时候触发这个事件,跟web中的click事件一样。 触发了这个事件以后,执行butClick:这个方法,addTarget:self 的意思是说,这个方法在本类中 也可以传入其他类的指针*/
    //添加事件
    [button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];
    //删除事件
    [button1 removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];

    //显示控件
    [self.view addSubview:button1];

十一、设置按钮内部图片间距和标题间距

UIEdgeInsets insets; // 设置按钮内部图片间距
insets.top = insets.bottom = insets.right = insets.left = 10;
bt.contentEdgeInsets = insets;
bt.titleEdgeInsets = insets; // 标题间距

十二、一些其他的按钮设置

btn1.titleLabel.font = [UIFont fontWithName:@“test” size:18];//设置按钮字体大小

[btn1 setTag:101] ;//设置tag值

btn1.layer.cornerRadius = 4.5;//设置圆角——四个圆角半径 
btn1.layer.borderWidth = 0.5;// 按钮边框宽度 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();                                                   // 设置颜色空间为rgb,用于生成ColorRef

CGColorRef borderColorRef = CGColorCreate(colorSpace,(CGFloat[]){ 0, 0, 0, 1 });                        // 新建一个红色的ColorRef,用于设置边框(四个数字分别是 r, g, b, alpha)

btn1.layer.borderColor = borderColorRef;                                                                                        // 设置边框颜色

十三、重写绘制行为
你可以通过子类化按钮来定制属于你自己的按钮类。在子类化的时候你可以重载下面这些方法,这些方法返回CGRect结构,指明了按钮每一组成部分的边界。
注意:不要直接调用这些方法, 这些方法是你写给系统调用的。

backgroundRectForBounds   //指定背景边界 
contentRectForBounds         // 指定内容边界 
titleRectForContentRect       // 指定文字标题边界 
imageRectForContentRect   //指定按钮图像边界 

例:

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

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

-(void)btnPressed:(id)sender
{  
      UIButton* btn = (UIButton*)sender;  
      //开始写你自己的动作 
}
forControlEvents参数类型
 typedef NS_OPTIONS(NSUInteger, UIControlEvents) 
{
    UIControlEventTouchDown                 = 1 <<  0,      // 单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。
    UIControlEventTouchDownRepeat      = 1 <<  1,      // 多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
    UIControlEventTouchDragInside         = 1 <<  2,      // 当一次触摸在控件窗口内拖动时。
    UIControlEventTouchDragOutside       = 1 <<  3,      // 当一次触摸在控件窗口之外拖动时。
    UIControlEventTouchDragEnter           = 1 <<  4,      // 当一次触摸从控件窗口之外拖动到内部时
    UIControlEventTouchDragExit             = 1 <<  5,      // 当一次触摸从控件窗口内部拖动到外部时。
    UIControlEventTouchUpInside            = 1 <<  6,      // 所有在控件之内触摸抬起事件
    UIControlEventTouchUpOutside          = 1 <<  7,      // 所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。
    UIControlEventTouchCancel                = 1 <<  8,      //所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。

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

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

    UIControlEventAllTouchEvents             = 0x00000FFF,  // 通知所有触摸事件。
    UIControlEventAllEditingEvents           = 0x000F0000,  // 通知所有关于文本编辑的事件。
    UIControlEventApplicationReserved    = 0x0F000000,  // range available for application use
    UIControlEventSystemReserved          = 0xF0000000,  // range reserved for internal framework use
    UIControlEventAllEvents                      = 0xFFFFFFFF   // 通知所有事件
}; 

你可能感兴趣的:(ios,UIButton)