iOS学习之UIButton

与上次UILabel一样,我们新创一个方法来创建UIButton

- (void)createUIRectButton
{
    //创建一个btn对象,根据类型来创建btn
    //圆角类型btn:UIButton TypeRoundedRect
    //通过类方法来创建buttonWithType: 类名加方法名
    
    //不可通过alloc init来创建
    UIButton * btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    
    //位置
    btn.frame = CGRectMake(100, 100, 100, 40);
    
    //设置按钮的文字
    //@parameter
    //参数1:   字符串类型,显示到按钮上的文字
    //参数2: 设置文字显示的状态类型:UIControlStateNormal, 正常状态
    [btn setTitle:@"按钮1" forState:UIControlStateNormal];
    
    //按下状态
    //显示的文字
    //显示文字的状态
    [btn setTitle:@"按钮按下" forState:UIControlStateHighlighted];
    
    //灰色背景
    btn.backgroundColor = [UIColor grayColor];
    
    //设置文字显示的颜色
    //P1.颜色
    //P2.状态
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    
    //设置按下状态的颜色
    [btn setTitleColor:[UIColor orangeColor] forState:UIControlStateHighlighted];
    
    //设置按钮的风格颜色
    //(优先级没有setTitleColor高)
    [btn setTintColor: [UIColor whiteColor]];
    
    //titleleLabel: UILabel空间
    btn.titleLabel.font = [UIFont systemFontOfSize: 18];
    
    //添加的视图中并显示
    [self.view addSubview:btn];
}

然后我们在viewDidLoad方法中去调用这个方法

[self createUIRectButton];

即可将我们创建的UIButton添加到视图上显示出来

下面我们讲解一下UIButton的几个问题

1.UIButton的内存是由自己管理的,我们不用去alloc init

2.按钮的文字的添加需要具体添加到某种状态上,例如

[btn setTitle:@"按钮1" forState:UIControlStateNormal];

这样就设置了按钮的普通状态(UIControlStateNormal)的显示文字“按钮1”,按钮的状态有如下几种

typedef NS_OPTIONS(NSUInteger, UIControlState) {
    UIControlStateNormal       = 0,
    UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set
    UIControlStateDisabled     = 1 << 1,
    UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)
    UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // Applicable only when the screen supports focus
    UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use
    UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use
};

我们常用的两种状态分别为UIControlStateNormal(普通状态)和UIControlStateSelected(选中状态),一个是按钮的默认状态,另一个是按钮点击后的状态,这就是UIButton的基本用法。

UIButton的点击事件:这是很重要的一块,因为它可以触发一些事件,例如页面跳转,弹框之类的东西。下面我们具体地讲一下这个东西:

        语法:首先它的语法如下

[btn addTarget:self action:@selector(touchDown) forControlEvents:UIControlEventTouchUpInside];

我们先来介绍一下参数,

参数1:目标,我们写为self,即它本身的意思

参数2:action,我们将要触发的事件事件添加在@selector()选择器中

参数3:Events,所有的类型有下面几种

typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
    UIControlEventTouchDown                                         = 1 <<  0,      // on all touch downs
    UIControlEventTouchDownRepeat                                   = 1 <<  1,      // on multiple touchdowns (tap count > 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,     // sliders, etc.
    UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13,     // semantic action: for buttons, etc.

    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
};

是不是特别多呢,真是让人眼花缭乱,但我们常用的Event一般是UIControlEventTouchUpInside,即为被按下的时候就会触发我们选择器中的事件。

这里,给一个小demo

//
//  ViewController.m
//  UIButton事件处理
//
//  Created by 开朗的男子 on 2018/7/20.
//  Copyright © 2018年 开朗的男子. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)creatBtn
{
    UIButton * btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    
    btn.frame = CGRectMake(100, 100, 80, 40);
    
    [btn setTitle:@"按钮" forState: UIControlStateNormal];
    
    //向按钮添加事件函数
    //P1 :谁来实现事件函数,实现着对象就是“谁”
    //P2 :@selector(pressBtn): 函数对象,当按钮满足P3的事件类型时,调用函数
    //P3 :UIControlEvent:事件处理函数类型
    //UIControlEventTouchUpInside:当手指离开屏幕时,并且手指的位置在我们的按钮范围内。触发事件
    //UIControlEventTouchDown: 指当我们的手指触碰到屏幕上时
    //UIControlEventTouchUpOutside:当手指离开屏幕时,并且手指的位置在我。触发事件
    [btn addTarget:self action: @selector(pressBtn: ) forControlEvents: UIControlEventTouchUpInside];
    
    [self.view addSubview: btn];
    
    //设置按钮的标记值
    btn.tag = 101;
}

//参数为调用此函数的按钮对象本身
- (void)pressBtn: (UIButton *) btn
{
    btn.selected = !btn.selected;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [self creatBtn];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

注释写得还不是很清楚,所以我再说一下。

当btn按钮点击后就会触发我们写好的pressBtn:方法中,此时,按钮在点击后就会变成不同的状态,即触发实现了我们的点击事件,在以后的学习中,我们将常常利用Button来跳转页面。

猜你喜欢

转载自blog.csdn.net/qq_40596811/article/details/81543052