与上次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来跳转页面。