按钮UIButton的使用
一、使用概要
当添加一个按钮到你的界面,执行以下步骤:
1、在创建时设置按钮的类型。
2、提供一个标题字符串或图像,为您的内容适当调整按钮的大小。
3、连接一个或多个操作按钮的方法。
4、设置自动布局规则界面中的按钮的大小和位置。
5、提供可访问性信息和本地化字符串。
二、具体使用
1、使用类方法创建一个按钮对象
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
注意:能够定义的button类型有以下6种
typedef NS_ENUM(NSInteger, UIButtonType) {
UIButtonTypeCustom = 0, 自定义风格
UIButtonTypeSystem,标准的系统按钮
UIButtonTypeDetailDisclosure,蓝色小箭头按钮,主要做详细说明用
UIButtonTypeInfoLight,亮色的感叹号
UIButtonTypeInfoDark,暗色的感叹号
UIButtonTypeContactAdd,十字加号按钮
UIButtonTypeRoundedRect = UIButtonTypeSystem,圆角矩形按钮
};
注意:若要设置按钮的image或者backgroundImage,建议定义按钮的风格为UIButtonTypeCustom,这样才能保证设置成功。
2、设置按钮的标题
[button1 setTitle:@"dianji" forState:UIControlStateNormal];
[button1 setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[button1 setTitleShadowColor:[UIColor redColor] forState:UIControlStateNormal];
3、设置按钮的背景色、背景图片
[button1 setBackgroundColor:[UIColor redColor]];
[button1 setBackgroundImage: [UIImage imageNamed:@"btng.png"] forState:UIControlStateNormal];
4、设置按钮的图片
[button1 setImage:[UIImage imageNamed:@"btng.png"] forState:UIControlStateNormal];
注意:setTitle和setImage方法不能同时使用,同时使用只会显示图片不会显示文字。如果要设置图片和标题,应该使用setBackgroundImage和setTitle或者自定义一个UIButton的子类来实现。
5、设置按钮在父件上的位置与自身大小
[button1 setFrame:CGRectMake:(100, 100, 200, 200)];
注意:按钮有以下几种状态
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal = 0,常规状态显示
UIControlStateHighlighted = 1 << 0,高亮状态显示
UIControlStateDisabled = 1 << 1,禁用状态才会显示
UIControlStateSelected = 1 << 2,选中状态显示
UIControlStateFocused = 1 << 3,只适用于有压力感应的屏幕
UIControlStateApplication = 0x00FF0000,当应用程序被标示时
UIControlStateReserved = 0xFF000000,系统预留
};
关于按钮状态的几点说明:
1)默认情况下,当按钮处于高亮状态时,图片的颜色会画的深一点,如果下面这个属性设置为NO,那么这个功能无效。
button1.adjustsImageWhenHighlighted = NO;
2)默认情况下,当按钮处于禁用状态时,图片的颜色会画的深一点,如果下面这个属性设置为NO,那么这个功能无效。
button1.adjustsImageWhenDisabled = NO;
3)下面这个属性设置为yes的状态,按钮在高亮状态时会发光。
button1.showsTouchWhenHighlighted = YES;
4)设置按钮禁用
button1.enabled = NO;
5)设置按钮选中状态
button1.selected = YES;
6、连接一个或多个操作按钮的方法
[button1 addTarget:self action:@selector(btnClientAction) forControlEvents:UIControlEventTouchUpInside];
可以翻译为:当button1按钮上发生UIControlEventTouchUpInside点击事件时,会出发self(当前类)中的btnClientAction方法。
注意1、点击事件的类型有以下种类
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, // semantic action: for buttons, etc.
UIControlEventEditingDidBegin = 1 << 16, 文本控件开始编辑时触发
UIControlEventEditingChanged = 1 << 17, 文本控件的文本改变
UIControlEventEditingDidEnd = 1 << 18, 文本控件结束编辑时触发
UIControlEventEditingDidEndOnExit = 1 << 19, 文本控件内通过按下回车键结束编辑时触发
UIControlEventAllTouchEvents = 0x00000FFF, 所有的触摸事件
UIControlEventAllEditingEvents = 0x000F0000, //UITextField编辑的所有事件
UIControlEventApplicationReserved = 0x0F000000, // range available for application use
UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use
UIControlEventAllEvents = 0xFFFFFFFF,所有事件
};
注意2、触发的方法带参数的含义是,将button1对象作为参数传递给触发方法。
7、取消按钮已经添加的所有事件
[button1 removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
前两个参数传nil,会使得取消button1所有的UIControlEventTouchUpInside事件触发。
8、调整按钮中的文本框和图片的位置
button1.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10);
button1.titleEdgeInsets = UIEdgeInsetsMake(50, 50, 50, 50);
但是,上面方法是以它们之前的位置而言的,所以为了省事,在需要调整位置的情况下使用下面两行代码,先让文本框和图片位于按钮的左上角后,再去调节按钮上文本框和图片的偏移量。
button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
button1.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
9、通过block自定义UIButton的点击事件
步骤1、自定义一个继承于UIButton的按钮
步骤2、声明block
typedef void (^ButtonBlock)(UIButton *);
@interface MyButton : UIButton@property(nonatomic,copy)ButtonBlock block;
- (void)addTapBlock:(ButtonBlock)block;
@end步骤3、重写button的点击事件的方法
- (void)addTapBlock:(ButtonBlock)block
{
_block = block;
[self addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)buttonAction:(UIButton *)button
{
_block(button);
}步骤4、在视图控制器中调用button的block方法
[button addTapBlock:^(UIButton *button){
NSLog(@"按钮被点击了");
}];
三、代码Copy使用
- (void)setupBtnObject
{
//创建一个UIButton对象
UIButton *buttonObj = [UIButton buttonWithType:UIButtonTypeCustom]; //按钮对象的标识
[buttonObj setTag:]; //按钮的透明度。0.0~1.0
[buttonObj setAlpha:0.8]; //文字的内容
[buttonObj setTitle:@"Normal" forState:UIControlStateNormal];
[buttonObj setTitle:@"Selected" forState:UIControlStateSelected];
//文字的颜色
[buttonObj setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[buttonObj setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
//文字的阴影颜色
[buttonObj setTitleShadowColor:[UIColor greenColor] forState:UIControlStateNormal];
[buttonObj setTitleShadowColor:[UIColor yellowColor] forState:UIControlStateSelected];
//文字的字体大小
[buttonObj.titleLabel setFont:[UIFont systemFontOfSize:]]; //图片的内容。若同时使用setTitle和setImage,只会显示图片。若想同时显示,需使用setBackgroundImage或者自定义一个UIButton类。
[buttonObj setImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[buttonObj setImage:[UIImage imageNamed:@""] forState:UIControlStateSelected]; //背景色
[buttonObj setBackgroundColor:[UIColor lightGrayColor]]; //背景图片
[buttonObj setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[buttonObj setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateSelected]; //调整图片和文字的位置
buttonObj.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
buttonObj.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
buttonObj.imageEdgeInsets = UIEdgeInsetsMake(, , , );
buttonObj.titleEdgeInsets = UIEdgeInsetsMake(, , , ); //设置圆角
[buttonObj.layer setMasksToBounds:YES];
[buttonObj.layer setCornerRadius:6.0];
[buttonObj.layer setBorderWidth:1.0];
[buttonObj.layer setBorderColor:[[UIColor whiteColor] CGColor]]; //按钮高亮时,图片是否颜色变深
[buttonObj setAdjustsImageWhenHighlighted:NO];
//按钮禁用时,图片是否颜色变淡
[buttonObj setAdjustsImageWhenDisabled:NO];
//按钮按下时,按钮是否发光
[buttonObj setShowsTouchWhenHighlighted:NO]; //添加事件
[buttonObj addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; //禁用按钮
[buttonObj setEnabled:NO];
//按钮选中
[buttonObj setSelected:YES];
//若为NO,则发生在按钮上的事件传递到下一个能处理事件的控件区处理。
[buttonObj setUserInteractionEnabled:YES]; //添加显示
[self.view addSubview:buttonObj]; //设置约束条件
[buttonObj mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo();
make.top.mas_equalTo();
make.size.mas_equalTo(CGSizeMake(SCREEN_WIDTH, ));
}];
}
- (void)btnAction:(UIButton *)btn
{
//取消按钮已经添加的某某事件
[btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchDragInside];
}
按钮UIButton的使用的更多相关文章
- IOS之UI -- 按钮UIButton的细节
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- iOS上如何让按钮(UIbutton)文本左对齐展示
// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = U ...
- ios 学习笔记(8) 控件 按钮(UIButton)的使用方法
在实际开发中,对于开发者来说,更多的还是使用“自定义”按钮.将“按钮”对象的类型设置成UIButtonTypeCustom.这样一来,按钮的所有元素都将由开发者来配置和自定义. 对于一个自定义按钮来说 ...
- IOS UI-Button按钮
#import "ViewController.h" @interface ViewController () { UILabel *lable; BOOL moveFlag; N ...
- iOS 封装添加按钮的方法
添加按钮 #pragma mark 添加按钮 - (void)addButtonWithImage:(NSString *)image highImage:(NSString *)highImage ...
- IOS UIButton用法详解
这段代码动态的创建了一个UIButton,并且把相关常用的属性都列举了.希望对大家有用. //这里创建一个圆角矩形的按钮UIButton *button1 = [UIButton buttonWi ...
- iOS 自定义NavigationBar右侧按钮rightBarButtonItem--button
//两个按钮的父类view UIView *rightButtonView = [[UIView alloc] initWithFrame:CGRectMake(, , , )]; //历史浏览按钮 ...
- iOS 自定义返回按钮,保留系统滑动返回
原文链接 自定义返回按钮保留系统滑动返回手势.gif 1.简介 使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使 ...
- UI里的UIActionSheet按钮
1.效果图:分别为有短信分享 无短信分享 -(void)viewDidLoad{ //添加按钮 UIButton *share ...
随机推荐
- Django ORM中的模糊查询
ORM映射 什么是ORM映射?在笔者认为就是对SQL语句的封装,所写语句与SQL对应语句含义相同,使开发更加简单方便,不过也是存在弊端的,使程序运行效率下降.例如: UserInfo.objects. ...
- 使用Eclipse工具开发Servlet(新建web项目->创建Servlet->部署和访问Servlet)
在Eclipse工具栏中的[File]->[New]->[Other],打开如下菜单栏,选择Dynamic Web Project 点击下一步,如下图所示: 这里Dynamic web m ...
- Django模型model Field详解:
类型说明 AutoField一个自动增加的整数类型字段.通常你不需要自己编写它,Django会自动帮你添加字段:id = models.AutoField(primary_key=True),这是一个 ...
- Vue.nextTick DOM 更新循环结束之后执行延迟回调
在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 简单来说,Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统 ...
- buuctf——easyjava
虽然学过Javaweb的开发,但没好好学,所以对Javaweb了解不深 菜的真实 WEB-INF/web.xml泄露 贴一个别人的源码泄露总结ctf/web源码泄露及利用办法[总结中] WEB-INF ...
- 4_5 追踪电子表格中的单元格(UVa512)(选做)
在电子表格中的数据都存储在单元格中,它是按行和列(R)(C).一些在电子表格上的操作可以应用于单个单元格(研发),而其他的可以应用于整个行或列.典型的单元操作包括插入和删除行或列和交换单元格内容.一些 ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 排序、条件刷选函数
numpy.sort() 函数返回输入数组的排序副本.函数格式如下: numpy.sort(a, axis, kind, order) 参数说明: a: 要排序的数组 axis: 沿着它排序数组的轴, ...
- Vue父组件主动获取子组件的数据和方法
Vue父组件主动获取子组件的数据和方法 https://www.jianshu.com/p/bf88fc809131
- ANSYS初始残余应力赋值
目录 1.建模 2.划分网格并分组 3.所有节点固定约束 4.施加初始残余应力 5.结果 1.建模 建立有限元模型,采用SOLID185单元,模型尺寸0.050.050.02 材料为钢 !程序头 FI ...
- java调用exe
前言:最近做了一个Java跨平台开启,关闭,重启nginx的功能,在Java操作exe上遇到了一些问题,下面是对这个问题一个总结 一.Java操作exe的三种方式 (1)Runtime.getRunt ...