UIButton的自我整理
1.UIButton状态:
UIControlStateNormal // 正常状态
UIControlStateHighlighted // 高亮状态
UIControlStateDisabled // 禁用状态
UIControlStateSelected // 选中状态
UIControlStateApplication //
UIControlStateReserved // 保留状态
2.Uibutton类型:
UIButtonTypeCustom //自定义类型
UIButtonTypeRoundedRect //圆角类型
UIButtonTypeDetailDisclosure //细节展示按钮
UIButtonTypeInfoLight //浅色背景的信息按钮
UIButtonTypeInfoDark //暗色背景的信息按钮
UIButtonTypeContactAdd // 添加按钮
3.UIButton常用属性
给按钮设置文字时,苹果文档说明,不能使用label对象设置文字的颜色或者阴影颜色,相反必须使用setTitleColor:forState: and setTitleShadowColor:forState:这两个方法才能修改这些值。
设置按钮中其他属性依次类推。。。。
//设置对应状态的标题内容default is nil. title is assumed to be single line
- (void)setTitle:(NSString *)title forState:(UIControlState)state;
//设置对应状态的标题颜色 - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;
//设置对应状态的标题阴影颜色 - (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state;
//设置对应状态的按钮的图片 - (void)setImage:(UIImage *)image forState:(UIControlState)state;
//设置对应状态的按钮背景图片 - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;
添加事件 - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
这些事件都是基于触摸、基于值、基于编辑。有如下事件会触发。
在点击按钮是按钮是凹下去,然后弹起才触发起事件,按钮的状态有:
- UIControlEventTouchDown // 按下
- UIControlEventTouchDownRepeat 多次按下
- UIControlEventTouchUpInside // 在按钮及其一定外围内松开
- UIControlEventTouchUpOutside // 按钮外面松开
4.adjustsImageWhenDisabled
当按钮禁用的情况下,图像的颜色会被画深一点,默认为YES。
5.adjustsImageWhenHighlighted
当按钮高亮的情况下,图像的颜色会被画深一点,默认为YES。
6.showsTouchWhenHighlighted
button.showsTouchWhenHighlighted=YES;点击时的闪光效果会被前景图片遮住中间部分;
6.contentEdgeInsets
设置按钮的内部内容(包含按钮图片和标题)离按钮边缘上下左右的距离。
7.按钮实例
1.有些时候我们想让UIButton的title居左对齐,我们设置
btn.textLabel.textAlignment = UITextAlignmentLeft
是没有作用的,我们需要设置
btn.contentHorizontalAlignment = UIControlContentHorizonAlignmentLeft;
但是问题又出来,此时文字会紧贴到左边框,我们可以设置
btn.contentEdgeInsets = UIEdgeInsetsMake(0,10, 0, 0);
使文字距离左边框保持10个像素的距离。
button有自己的便利构造器,可以来创建对象
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
//指定button的大小
button.frame = CGRectMake(100,100,100,40);
//设置背景颜色
button.backgroundColor = [UIColor cyanColor];
//放进去
[self.window addSubview:button];
//button不需要release;
//给button设置标题
[ button setTitle:@"确认" forState:UIControlStateNormal ];
//给标题设置字体大小
button.titleLabel.font = [ UIFont systemFontOfSize:20];
//设置圆角和边框
button.layer.cornerRadius = 10;
button.layer.borderWidth = 1;
//给button设置背景图片,图片的格式必须是.png
[ button setBavkgroundImage:[ UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
//如果想使用setImage设置成图片的话,button的类型要调整为custom,setImage方法不会把图片放大成按钮大小
UIButton *button = [ UIButton buttonWithType:UIButtonTypeCustom];
//点击方法,button最重要的方法
//第一步.定义button,并给isclick一个初始状态
[ button addTarget:self action:@selector(click:)forControlEvents:UIControlEventTouchUpInside];
self.isclick = YES;
//第二步,定义一个记忆状态的方法
@property(nonatomic , assign)BOOL is click;
//第三步,写点击触发的事件
- (void)click:(UIButton * )button
{
if(self.isclick){
[button setImage:[UIImage imageNamed:@"btnOff.png"] forState:UIControlStateNormal];
}else{
[button setImage:[UIImage imageNamed:@"btnOn.png"] forState:UIControlStateNormal];
}
self.isclick = !self.isclick;
}
UIControlEvents 事件集合
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, //当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送
UIControlEventPrimaryActionTriggered = 1 << 13, //当控件的首要行为被触发,例如button的点击事件,slider的滑动事件。iOS_9之后可用
UIControlEventEditingDidBegin = 1 << 16, //当文本控件中开始编辑时发送通知。
UIControlEventEditingChanged = 1 << 17, //当文本控件中的文本被改变时发送通知。
UIControlEventEditingDidEnd = 1 << 18, //当文本控件中编辑结束时发送通知
UIControlEventEditingDidEndOnExit = 1 << 19, // 当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。
UIControlEventAllTouchEvents = 0x00000FFF, //通知所有触摸事件。
UIControlEventAllEditingEvents = 0x000F0000, //通知所有关于文本编辑的事件。
UIControlEventApplicationReserved = 0x0F000000, // 为应用程序预留
UIControlEventSystemReserved = 0xF0000000, //为系统内部框架预留
UIControlEventAllEvents = 0xFFFFFFFF //通知所有事件。
};