思来想去,UIButton就是一个按钮,就是平时我们用手指点击一个控件,然后有相应的事件产生,点击的时候或许还会产生颜色上的变化,这个就叫做UIbutton。
它可以显示文字,也可以显示图片,也可以动态调整内部的图片和文字,而且也可以添加属性化字符串,至于属性化字符串是什么,不懂的话没关系,后面我会讲到。
UIButton有三种状态:
默认情况(default)
对应的枚举常量:UIControlStateNormal
按钮被按下去的时候(手指还未松开)
对应的枚举常量:UIConrolStateHighlighted
如果enabled属性为0, 就是处于disable状态,代表按钮不可以被点击
对应的枚举常量:UIControlStateDisabled
下面就在代码里面说明UIButton的属性和方法吧
- (void)viewDidLoad {
[super viewDidLoad];
/*
typedef NS_ENUM(NSInteger, UIButtonType) {
UIButtonTypeCustom = 0, // 自定义风格
UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), // standard system button
UIButtonTypeDetailDisclosure, // 蓝色小箭头按钮,主要做详细说明用
UIButtonTypeInfoLight, // 亮色感叹号
UIButtonTypeInfoDark, // 暗色感叹号
UIButtonTypeContactAdd, // 加号按钮
UIButtonTypeRoundedRect = UIButtonTypeSystem, // 系统默认 圆角矩形按钮
};
*/
//创建一个类型为圆角矩形的按钮,当然也是系统默认
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
//frame里面包含控件的坐标和宽高,这里直接设置坐标(20, 20), 宽高(100, 100)
btn.frame = CGRectMake(20, 20, 100, 100);
//设置按钮的背景颜色
btn.backgroundColor = [UIColor greenColor];
//设置按钮的渲染颜色
btn.tintColor = [UIColor blackColor];
/*
这里设置状态,一般设置正常和高亮状态,当然也有其他状态可供选择
UIControlStateNormal = 0, // 正常状态
UIControlStateHighlighted = 1 << 0, // 高亮状态
UIControlStateDisabled = 1 << 1, // 禁用状态
UIControlStateSelected = 1 << 2, // 选中状态
UIControlStateApplication = 0x00FF0000, // 当应用程序标志时
UIControlStateReserved = 0xFF000000 // 内部预留
*/
//设置按钮的填充图片 正常状态下的
[btn setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateNormal];
//设置按钮的填充图片 高亮状态下 也就是被点击时
[btn setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateHighlighted];
//设置按钮上显示的文字
[btn setTitle:@"" forState:UIControlStateNormal];
//设置按钮上文字的颜色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//设置按钮上文字的阴影颜色
[btn setTitleShadowColor:[UIColor blueColor] forState:UIControlStateNormal];
//设置按钮的背景图片
[btn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
//设置按钮的属性字符串 此处如果不懂什么叫属性字符串 可以跳过
NSAttributedString * attrString =[[NSAttributedString alloc] initWithString:@"设置属性字符串"];
[btn setAttributedTitle:attrString forState:UIControlStateNormal];
//设置按钮内部图片的内间距
//top bottom 上下 left right 左右
//UIEdgeInsets inserts = UIEdgeInsetsMake(0, 0, 0, 0);
//默认情况下,当按钮高亮的情况下,图像的颜色会变深一些,这里设置为no,那么会取消这个状态
btn.adjustsImageWhenHighlighted = NO;
//默认情况下,当按钮禁用的情况下,图形的颜色会变深一些,这里设置为no,那么会取消这个状态
btn.adjustsImageWhenDisabled = NO;
//当此处设置为YES时,按下按钮的时候会发光
btn.showsTouchWhenHighlighted = YES;
/*
UIControlEventTouchDown //单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候
UIControlEventTouchDownRepeat //多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
UIControlEventTouchDragInside //当一次触摸在控件窗口内拖动时。
UIControlEventTouchDragOutside //当一次触摸在控件窗口之外拖动时。
UIControlEventTouchDragEnter //当一次触摸从控件窗口之外拖动到内部时。
UIControlEventTouchDragExit //当一次触摸从控件窗口内部拖动到外部时。
UIControlEventTouchUpInside //所有在控件之内触摸抬起事件。
UIControlEventTouchUpOutside //所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。
UIControlEventTouchCancel //所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。
UIControlEventTouchChanged //当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。
UIControlEventEditingDidBegin //当文本控件中开始编辑时发送通知。
UIControlEventEditingChanged //当文本控件中的文本被改变时发送通知。
UIControlEventEditingDidEnd //当文本控件中编辑结束时发送通知。
UIControlEventEditingDidOnExit //当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。
UIControlEventAlltouchEvents //通知所有触摸事件。
UIControlEventAllEditingEvents //通知所有关于文本编辑的事件。
UIControlEventAllEvents //通知所有事件。
*/
//给按钮增加一个点击事件
[btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
//删除某一种状态下的所有事件处理
//[btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
//给按钮增加一个长按事件
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLong:)];
//设置按多长事件会触发长按事件
longPress.minimumPressDuration = 1;
//把事件添加到按钮上
[btn addGestureRecognizer:longPress];
//把按钮添加到控制器的视图上
//注意,千万不要忘记这一步
[self.view addSubview:btn];
}
- (void)btnClick
{
NSLog(@"%s", __func__);
}
- (void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan)
{
NSLog(@"长按事件");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"消息" message:@"确定删除吗?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"删除", nil];
[alert show];
}
}
原文地址:http://blog.csdn.net/nethanhan/article/details/45652191