思来想去,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