按钮通常使用 Touch Up Inside 事件来体现,能够抓取用户用手指按下并在该按钮上松开发生的事件。
当检测到事件后,便可能触发相应视图控件中的操作(IBAction)
例子:1. 分享给大家
点击 选中状态打勾。再次点击 取消打钩
/**
* 初始化最后一个imageView
* @param imageView 最后一个imageView
*/
-(void)setupLastImageView:(UIImageView *)imageView
{
//1. 分享给大家(checkbox)
【 按钮的类型只能在初始化的时候设置】
//UIButton *titleButton = [UIButton buttonWithType:UIButtonTypeCustom]; 两者一样
[shareButton setImage:[UIImage imageNamed:@"new_feature_share_false"] forState:UIControlStateNormal];
[shareButton setImage:[UIImage imageNamed:@"new_feature_share_true"] forState:UIControlStateSelected];
[startBtn setBackgroundImage:[UIImage imageNamed:@"new_feature_finish_button"] forState:UIControlStateNormal];
[startBtn setBackgroundImage:[UIImage imageNamed:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];
[startBtn setImage:[UIImage imageNamed:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];
startBtn.size = startBtn.currentBackgroundImage.size ;
shareButton.width = 100;
shareButton.height = 30;
shareButton.CenterX = imageView.CenterX;
shareButton.CenterY = imageView.height * 0.65;
//设置图片和按钮
[shareButton setTitle:@"分享给大家" forState:UIControlStateNormal];
[shareButton setTitleColor: [UIColor blackColor ] forState:UIControlStateNormal];
shareButton.titleLabel.font = [UIFont boldSystemFontOfSize:15];
// addTarget : 【让谁去做事情】, action : 方法 : 【做什么事情】 事件:
[shareButton addTarget:self action:@selector(shareClick:) forControlEvents:UIControlEventTouchUpInside];
}
//分享按钮点击
-(void)shareClick:(UIButton *)shareBtn
{
shareBtn.selected = !shareBtn.isSelected; // 点击按钮取反
}
##例子:2. 九宫格
// 中间的标题按钮 【】
//UIButton *titleButton = [UIButton buttonWithType:UIButtonTypeCustom]; 两者一样
UIButton *titleButton = [[UIButton alloc]init];
titleButton.width = 150;
titleButton.height = 20;
//设置图片和按钮
[titleButton setTitle:@"首页" forState:UIControlStateNormal];
[titleButton setTitleColor: [UIColor blackColor ] forState:UIControlStateNormal];
titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:17];
[titleButton setImage:[UIImage imageNamed:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
[titleButton setImage:[UIImage imageNamed:@"navigationbar_arrow_down"] forState:UIControlStateSelected];
titleButton.imageEdgeInsets = UIEdgeInsetsMake(0, 70, 0, 0);
titleButton.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 40);
//创建一个按钮 初始化按钮的frame
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(50,50,50,50)];
//创建一个圆角矩形的按钮
UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect];
// 点属性 set 方法
// 裁剪多余部分 超出范围
self.showCarView. clipsToBounds = YES ;
// 设置背景色
button.backgroundColor =[UIColor whiteColor];
// 字体大小
button.titleLabel.font = [UIFont systemFontOfSize:14];
// 在view上的位置
button.frame =CGRectMake(20,20,20,20)
// 文字内容
[button setTitle:@“这是按钮哦” forState:UIControlStateNormal];
// 文字颜色
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
// 图片
[button setImage:[UIImage imageNamed:[UIImage imageNamed:@“123.png”]] forState:UIControlStateNormal];
startBtn.size = startBtn.currentBackgroundImage.size ;
titleButton.imageEdgeInsets = UIEdgeInsetsMake(0, 70, 0, 0);
titleButton.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 40);
titleButton. contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 40);
//设置边框宽度
button.layer.borderWidth = 1.0
//设置边框颜色
button.layer.borderColor =[UIColor orangeColor].CGColor
//设置圆角半径
button.layer.cornerRadius = 5.0 ;
//圆
button.layer.cornerRadius = button.frame.size.width * 0.5 ;
self.btn.enable = NO ; // 是否启用?
//监听按钮点击 target : 事件处理者。action : 事件处理方法 forControlEvents : 按钮的触摸点击事件
buttonClick: 有参数 buttonClick 无参数 @selector () 返回SEL 数据类型
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
//按钮添加到视图中
[self.view addSubview:button];
按钮的属性
按钮的样式 :ButtonWithType:
UIButtonTypeCustom: 自定义风格
UIButtonTypeRoundedRect : 圆角矩形
UIButtonTypeDetailDisclosure:蓝色小箭头,主要做详细说明用
UIButtonTypeInfoLight: 亮色感叹号
UIButtonTypeInfoDark:暗色感叹号
UIButtonTypeContactAdd: 十字加号按钮
按钮的状态:forState
UIControlStateNormal 常规状态
UIControlStateHighlighted 高亮状态
UIControlStateDisabled 禁用状态
UIControlStateSelected 选中状态
按钮的方法
//设置按钮中的文字
- (void)setTitle:(nullable NSString *)title forState:(UIControlState)state;
//设置按钮中的文字颜色
-(void)setTitleColor:(nullable UIColor *)color forState:(UIControlState)state
//设置标题阴影的变化方式
- (void)setTitleShadowColor:(nullable UIColor *)color forState:(UIControlState)state UI_APPEARANCE_SELECTOR; // default is nil. use 50% black
//设置按钮中的图片
- (void)setImage:(nullable UIImage *)image forState:(UIControlState)state; // default is nil. should be same size if different for different states
//设置按钮中的背景图片
- (void)setBackgroundImage:(nullable UIImage *)image forState:(UIControlState)state UI_APPEARANCE_SELECTOR; // default is nil
- (void)setAttributedTitle:(nullable NSAttributedString *)title forState:(UIControlState)state NS_AVAILABLE_IOS(6_0); // default is nil. title is assumed to be single line
* 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no,
* 那么可以去掉这个功能
*/
button1.adjustsImageWhenHighlighted = NO;
/*跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/
button1.adjustsImageWhenDisabled = NO;
/* 下面的这个属性设置为yes的状态下,按钮按下会发光*/
button1.showsTouchWhenHighlighted = YES;
需求: 例子
1.ios button 点击Action连接到.h 文件的 @interface 会在 @implementatopm生成方法
2. 链接到.m 文件中 @interface 中 也会在@implementation 生成方法
3. 直接链接到.m 的@implementation 会生成方法 ! 这三个有什么区别吗
解决:1..h 文件里面的成员外部可以访问(可以设置输出口)
2. 会自动生成set 和 get 方法,如果选择Action(可以设置输出口)
3. 可以生成set 和 get 方法, 不能设置输出口
需求:点语法和setter 如何区分使用?
例子: [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]
btn.contentVerticalAlignment = UIControlContentVerticalAlignment;
解决:用点语法 实际上是调用了属性的set 和 get方法
UIButton titleColor 是个方法不是属性 所以点不出来 setTitleColor 是直接调用的方法
【常用】点击事件
Sent Events :
Did End On Exit 用户点击return 或者 done 按钮
Editing Changed 字符增减,cursor改变位置等
Editing Did Begin 当field得到焦点
Editing Did End 焦点离开field
Touch Cancel 取消当前区域的点击操作
Touch Down 按下按钮
Touch Down Repeat 重复按下按钮
Touch Drag Enter 仅当触摸拖动进入控件范围时发生一次
Touch Drag Exit 仅当触摸拖动离开控件范围时发生一次
Touch Drag Inside 当触摸拖动在控件范围内会随用户的持续拖动而持续发生
Touch Drag Outside 当触摸拖动离开控件范围后会随用户的持续拖动而持续发生
Touch Up Inside 按住按钮后 在按钮范围内松开 (常用)
Touch Up Outside 按住按钮后 在按钮范围外松开
Value Changed 一个点击拖拽或者操作一个区域 产生一系列的值```
## 1. 自定义Button 例子
![左边文字 右边图片的样式](http://upload-images.jianshu.io/upload_images/2442197-afdd528c2e9d2b21.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
只要 自定义一个XMGButton 继承自UIButton
然后在。m文件中 写入一下代码就好了。
当你要使用这个自定义 Button的时候
你必须导入这个头文件
import "XMGButton.h"
然后在你要用的UIViewController 中 写入
XMGButton *button = [[XMGButton alloc] init];
和其他的相应代码即可。
## 2. 自定义Button 例子 方式二
![方式二.png](http://upload-images.jianshu.io/upload_images/2442197-793b3aa45a5a818e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## 3. 自定义Button 例子
上图 下文字: 具体操作参考上图
![5AD19F32-6385-4F93-9D24-2AD0E31AAC42.png](http://upload-images.jianshu.io/upload_images/2442197-970c7f79128d18bf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## 3. 自定义Button --- 记住密码 打钩选中
![记住密码 打钩选中](http://upload-images.jianshu.io/upload_images/2442197-3736640d746bde80.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#4.图片的拉伸问题
![图片样式.png](http://upload-images.jianshu.io/upload_images/2442197-c4c9c28c71715a1e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
方式1:
![E72660821A2E52F690DCAEEFDA8EB4BB.jpg](http://upload-images.jianshu.io/upload_images/2442197-a595acd8a959154c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
方式二:
![CC438E35-E0B7-4297-B0E6-849C5F63B7FF.png](http://upload-images.jianshu.io/upload_images/2442197-d0c03afacf966356.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##需求:关于图片拉伸 的问题解决。
方法二 :在图片中设置
1.如果是正方形的 就设置 slicing 为 水平和垂直的。
- 如果是QQ 聊天类型的图片 就查看图片像素 比如 Size 128 -112 pixels
就在left 设置64 right 63 top 56 Bottom 39 width = height = 1 ;
NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
attrs[NSFontAttributeName] = titleButton.titleLabel.font;
CGFloat titleW = [titleButton.currentTitle sizeWithAttributes:attrs].width;
NSStringFromCGRect(self.titleLabel.frame);
NSStringFromCGRect(self.imageView.frame);