UIButton的基本使用
1. 创建button
UIButton *btn = [UIButton buttonWithType:(UIButtonType)UIButtonTypeCustom];
UIButtonType 枚举类型
UIButtonTypeCustom = 0 自定义风格
UIButtonTypeRoundedRect 圆角矩形
UIButtonTypeDetailDisclosure 蓝色小箭头按钮, 主要做详细说明使用
UIButtonTypeInfoLight 亮色感叹号
UIButtonTypeInfoDark 暗色感叹号
UIButtonTypeContactAdd 十字加号按钮
2. frame 设置按钮的位置大小
btn.frame = CGRectMake(0,104,SCREEN_Width,40); (SCREEN_Width 屏幕宽度)
3. title 按钮样式内容
[btn setTitle:@"本是恶魔世界里的小丑, 奈何生长在了耀眼的和平世界" forState: UIControlStateNormal]; 设置按钮文本内容
[btn setTitleColor:[UIColor blackColor] forState:(UIControlState)UIControlStateNormal]; 设置按钮文本字体颜色
[btn setImage:[UIImage imageNamed:@"weChat"] forState:(UIControlStateNormal)]; 给按钮设置图片,
在同时设置按钮的图片和文字内容时会左边显示图片, 右边显示文字, 如下图
btn.backgroundColor = [UIColor yellowColor]; 给按钮设置背景颜色
[btn setBackgroundImage:[UIImage imageNamed:@"share"] forState:(UIControlStateNormal)]; 按钮设置背景图片
btn.layer.masksToBounds = YES;
btn.layer.cornerRadius = 10;
btn.layer.borderColor = [UIColor blueColor].CGColor;
btn.layer.borderWidth = 1; 以上四行代码就是设置按钮的圆角和边框(UIlabel等控件同)
UIControlState 按钮枚举类型
UIControlStateNormal = 0 常规状态显示 (使用次数居多)
UIControlStateHighlighted 高亮状态显示
UIControlStateDisabled 禁用的状态才能显示
UIControlStateSelected 选中时显示的状态
UIControlStateFocused 当获得焦点状态时才会显示
UIControlStateApplication 当应用程序标志时显示
UIControlStateReserved 为内部框架预留, 开发时不用管
4. adjustsImageWhenHighlighted 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点
btn.adjustsImageWhenHighlighted = NO; 如果这下面的这个属性设置为no, 那么可以去掉这个功能
5. adjustsImageWhenDisabled 如果4的按钮设置为NO时 设置这个属性为NO时会取消4的设置
btn.adjustsImageWhenDisabled = NO;
6. showsTouchWhenHighlighted 当这个属性为YES时按下按钮会发光
btn.showsTouchWhenHighlighted = YES; 亲测有效
7. 给按钮添加点击事件addTarget
[btn addTarget:self action:@selector(selectorBtn) forControlEvents:(UIControlEventAllTouchEvents)];
UIControlEvents 点击事件枚举类型
UIControlEventTouchDown
单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。
UIControlEventTouchDownRepeat
多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
UIControlEventTouchDragInside
当一次触摸在控件窗口内拖动时。
UIControlEventTouchDragOutside
当一次触摸在控件窗口之外拖动时。
UIControlEventTouchDragEnter
当一次触摸从控件窗口之外拖动到内部时。
UIControlEventTouchDragExit
当一次触摸从控件窗口内部拖动到外部时。
UIControlEventTouchUpInside (常用)
所有在控件之内触摸抬起事件。
UIControlEventTouchUpOutside
所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。
UIControlEventTouchCancel
所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。
UIControlEventTouchChanged
当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。
UIControlEventEditingDidBegin
当文本控件中开始编辑时发送通知。
UIControlEventEditingChanged
当文本控件中的文本被改变时发送通知。
UIControlEventEditingDidEnd
当文本控件中编辑结束时发送通知。
UIControlEventEditingDidOnExit
当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。
UIControlEventAlltouchEvents
通知所有触摸事件。
UIControlEventAllEditingEvents
通知所有关于文本编辑的事件。
UIControlEventAllEvents
通知所有事件。
8. 按钮样式图片+文字
样式需要重写button方法, 可以网上搜索一下, 很多文章本文小编给放一个在上面
.h文件里面
@interfaceUIButton(Extensions)
- (void)setUpImageAndDownLableWithSpace:(CGFloat)space; 上部分是图片,下部分是文字
- (void)setLeftTitleAndRightImageWithSpace:(CGFloat)space; 左边是文字,右边是图片
- (void)setBadgeValue:(NSInteger)badgeValue; 设置角标的个数(右上角)
@end
.m文件里面
@implementation UIButton (Extensions)
上部分是图片,下部分是文字
- (void)setUpImageAndDownLableWithSpace:(CGFloat)space{
CGSizeimageSize =self.imageView.frame.size;
CGSizetitleSize =self.titleLabel.frame.size;
// titleLabel的宽度不一定正确的时候,需要进行判断
CGFloat labelWidth = self.titleLabel.intrinsicContentSize.width;
if(titleSize.width< labelWidth) {
titleSize.width= labelWidth;
}
// 文字距上边框的距离增加imageView的高度+间距,距离左边框减少imageView的宽度,距离下边框和右 边框距离不变
[selfsetTitleEdgeInsets:UIEdgeInsetsMake(imageSize.height+space, -15, -space,0)];
// 图片距右边框的距离减少图片的宽度,距离上面的间隔,其它不变
[selfsetImageEdgeInsets:UIEdgeInsetsMake(-space*2, -space*0.5,0.0,-titleSize.width)];
}
左边是文字,右边是图片(和原来的样式翻过来)
- (void)setLeftTitleAndRightImageWithSpace:(CGFloat)space{
CGSizeimageSize =self.imageView.frame.size;
CGSizetitleSize =self.titleLabel.frame.size;
// titleLabel的宽度不一定正确的时候,需要进行判断
CGFloat labelWidth = self.titleLabel.intrinsicContentSize.width;
if(titleSize.width< labelWidth) {
titleSize.width= labelWidth;
}
// 文字距左边框的距离减少imageView的宽度-间距,右侧增加距离imageView的宽度
[selfsetTitleEdgeInsets:UIEdgeInsetsMake(0.0, -imageSize.width- space,0.0, imageSize.width)];
// 图片距左边框的距离增加titleLable的宽度,距右边框的距离减少titleLable的宽度
[selfsetImageEdgeInsets:UIEdgeInsetsMake(0.0, titleSize.width,0.0,-titleSize.width)];
}
设置角标的个数(右上角
- (void)setBadgeValue:(NSInteger)badgeValue{
CGFloatbadgeW = 20;
CGSizeimageSize = self.imageView.frame.size;
CGFloatimageX = self.imageView.frame.origin.x;
CGFloatimageY = self.imageView.frame.origin.y;
UILabel*badgeLable = [[UILabelalloc]init];
badgeLable.text = [NSStringstringWithFormat:@"%ld",badgeValue];
badgeLable.textAlignment = NSTextAlignmentCenter;
badgeLable.textColor= [UIColorwhiteColor];
badgeLable.font = [UIFontsystemFontOfSize:12];
badgeLable.layer.cornerRadius = badgeW*0.5;
badgeLable.clipsToBounds = YES;
badgeLable.backgroundColor = [UIColorredColor];
CGFloatbadgeX = imageX + imageSize.width- badgeW*0.5;
CGFloatbadgeY = imageY - badgeW*0.25;
badgeLable.frame = CGRectMake(badgeX, badgeY, badgeW, badgeW);
[self addSubview:badgeLable];
}
@end