UIButton
UIbutton属性
边框
// 设置边框颜色 infoErrorButton.layer.borderWidth = 1.0; infoErrorButton.layer.borderColor = [UIColor cyanColor].CGColor; // 两个都要 // 变成圆形 self.button.layer.cornerRadius = buttonW/2.0-2.5; self.button.layer.masksToBounds = YES; // 两个都要 // titleLabel排版位置(指的是label控件而不是label的内容) topButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; UIControlContentHorizontalAlignmentCenter = 0, UIControlContentHorizontalAlignmentLeft = 1, UIControlContentHorizontalAlignmentRight = 2, UIControlContentHorizontalAlignmentFill topButton.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);(靠左20个像素,不会紧靠边框) // 已有颜色改变透明度(white可以看的) [UIColor alloc] initWithWhite:0.5 alpha:0.4].CGColor;
- sizeToFit 自动更改边框大小
[button sizeToFit]
UIButton取消点击效果
// 注意type要设置为custom button.adjustsImageWhenHighlighted = NO;
UIButton改变本身的label和imageView的frame
UIButton内部改动
- 返回位置
// 返回imageView的位置 - (CGRect)imageRectForContentRect:(CGRect)contentRect { return CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) } // 返回title的位置 - (CGRect)titleRectForContentRect:(CGRect)contentRect { return CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) }
- 布局子控件layoutSubviews(self.frame一改动,就会调用这个方法)
- (void)layoutSubviews { // 这个很重要 [super layoutSubviews]; // 可以利用self.bounds来对label和imageView进行设置frame // titleLabel的位置 self.titleLabel.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>); // imageView的位置 self.imageView.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>); }
- UIButton实例对象直接改动
// titleLabel
[btn setTitleEdgeInsets:UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right); // 距离四周的距离
// imageView,这代码有的时候可能看起来没效果,可能是因为图片太小,当edge比较小时,图片就自动缩小,这样要计算整个按钮-图片大小来计算edge,这样的话titleLabel与imageView之间可能不会紧凑这个问题没办法处理,直接换张设置刚好的大小计算好放在3X就好
[btn setImageEdgeInsets:UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right); // 距离四周的距离
// titleLabel和imageView作为整体
// 按钮所有内容左对齐
backButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
// 中间
UIControlContentHorizontalAlignmentCenter = 0,
// 左
UIControlContentHorizontalAlignmentLeft = 1,
// 右
UIControlContentHorizontalAlignmentRight = 2,
// 填满
UIControlContentHorizontalAlignmentFill = 3,
- UIButton里面的图片设置
UIButton样式
UIButton *button = [UIButton alloc] initWithType:(UIButtonType)];
UIButtonType
1、UIButtonTypeDetailDisclosure
2、UIButtonTypeInfoLight
3、 UIButtonTypeInfoDark以上三种类型图标相同,width和height在>0 && >= 20,
图标会随着数值大小变化,当为20(图3);如果width和height不同,会变形
(图2),>20图标不变,但是范围变大(图1)4、 UIButtonTypeContactAdd,
5、 UIButtonTypeRoundedRect = UIButtonTypeSystem(default),系统默认样式 6、UIButtonTypeCustom 自定义样式
图1: 图2:
图3:
UIButton状态(常用四种状态)
设置属性
[btn setTitleColor: forState:(UIControlState) ]; 1.ControlStateNormal // 正常状态,即按钮没被点击的时候 2.ControlStateHightlight // 高亮状态,即按钮被点没有放开的时候 3.ControlStateDisabled // 不可使用的状态,即按钮变灰的时候 4.ControlStateSelected // 可选择,就像音乐播放器的播放开关若可选择状态(btn.selected = YES)即一个按钮可触发两个事件,
ControlStateSelected(可用于开关之类)
- (void)click:(UIButton *)btn { if([btn isSelected]) { .... .... .... btn.selected = NO; // 设置为NO,下次传进来才能触发另外一个事件 } else // btn.selected == NO { .... .... .... btn.selected = YES; } } // 两个状态进行交换, // 点一下,.selected = YES,触发一种事件; // 再点一下,.selected = NO,触发另外一种事件
button里面titleLabel和imagView作为整体挪动
// 按钮所有内容左对齐
backButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
// 中间
UIControlContentHorizontalAlignmentCenter = 0,
// 左
UIControlContentHorizontalAlignmentLeft = 1,
// 右
UIControlContentHorizontalAlignmentRight = 2,
// 填满
UIControlContentHorizontalAlignmentFill = 3,
button关联,取消点击事件(有不同的触发手势喔~,不同情况下要使用不同触发手势喔,不然会......,造成控件点击,显示不了效果)
继承UIControl的控件都能触发事件
一个控件可关联多个事件(不推荐),也可多个控件关联同一个事件
在控件区,直接拖拽生成控件
关联事件(成功的话,代码左边有实心黑点)
1、 control + 点击控件拖线到代码区; 2、填写内容
取消事件
1、 右击控件区控件,删除连线(实心黑点变成空心点点) 2、 删除代码区代码
在代码区
关联事件(代码如下:)
// 我是代码= -- = [btn addTarget:(nullable id)self action:(nonnull SEL)@selector(方法名(有参数请不要漏掉这个 : )) forControlEvents:(UIControlEvents)]; 1.UIControlEventTouchUpInside ; // 点下去放开的时候触发 2.UIControlEventTouchInside; // 点击下去,控件的范围之内放开的时候触发 3.UIControlEventTouchDown; // 点击下去,还没放开的时候触发 4.UIControlEventDownReat; // 连续两次点击,第二次点击还没放开的时候触发 5.UIControlEventTouchDragInside; // 点击下去不放开,在控件范围内移一下,触发一次;移多下,触发多次 6.UIControlEventDrayOutside; // 点击下去不放开,在控件范围外移一下,触发一次;移多下,触发多次
取消事件
1、直接删除关联代码就ok