(1)UIButton类继承自UIControl,而UIControl继承自UIView,因为UIView就是个矩形区域,所以UIButton实例化的对象其实都是一个矩形,虽然有各种圆角、增加联系人、信息按钮等等,给它们加个背景它们就现形成矩形了,而且它们有个frame属性,这就是设置位置和矩形框的。

(2)UIButton创建一个按钮不用实例化,也就是不用alloc和init,而是直接调用内置的几个工厂方法即可,这一点和UILabel *label1=[[UILabel alloc]init]不同,而且这些类型里面最常用的时Custom类型,因为我们可以自定义图片,以及图片和文字的位置。

(3)按钮有很多状态,正常状态Normal、被点击时状态Highlighted等等,所以可以分别对不同状态设置属性。

(4)其实按钮最重要的不是上面那些设置属性,而是按钮关联的操作是什么?即点击后发生什么,这需要一个addtarget操作函数,如果多个按钮用到同一个函数,则需要tag属性来区别是哪个按钮。

(5)要自定义按钮,一种方式是我们先自定义一个继承UIButton的类,然后对这个类进行重写函数,相当于定制,最后用这个类去创建按钮,这些按钮也就具有自定义的样式(这种方法只针对自定义按钮类型有效)。

- (void)viewDidLoad {
  //生成一个btn1对象,不需要alloc和init,而是直接用内置的工厂方法,有很多可CMD+点击查看
  UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
  //设置位置和宽高
  btn1.frame=CGRectMake(30, 30, 300, 30);
  //设置按钮的文字,状态有好几种常用的时Normal和Highlighted(点击时状态),可CMD+点击查看
  [btn1 setTitle:@"点我啊!" forState:UIControlStateNormal];
  //设置点击时的文本
  [btn1 setTitle:@"我被点了!" forState:UIControlStateHighlighted];
  //设置文字颜色
  [btn1 setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
  [btn1 setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
  //设置点击时按钮背景颜色,呃,完全不起作用,即无效果
  [btn1 setTintColor:[UIColor purpleColor]];
  //点击时按钮发光,就是在按钮中间发亮光,这个有效果
  btn1.showsTouchWhenHighlighted=YES;
  //设置tag标签,唯一标记用,可用于分辨是哪个按钮控件
  btn1.tag=1;
  //设置背景颜色
  btn1.backgroundColor=[UIColor redColor];
  //现在高版本的iOS里这个方法会让人抓狂,因为我们发现,不设置背景时,圆角按钮没有边框,所以上面设置frame其实意义不大
  //设置了背景或者图片后,背景是矩形,说好的圆角呢?坑爹呢!
  //所以现在大多数开发都是用UIButtonTypeCustom,而不是UIButtonTypeRoundedRect

  //最重要的添加触发事件用户交互
  //self是指调用哪个对象的方法
  //btnClick:是调用的方法,btnClick和btnClick:不一样,后者表示有参数
  //UIControlEventTouchUpInside是触发事件,有很多,可以CMD+点击查看
  //这里三个参数都可以随意更换,比如新建一个类Hi,在类里定义一个方法-(void)report;
  //然后在此文件引入Hi.h头文件,在这里实例化一个对象hi1,然后就可以用hi1代替self,用report代替btnClick
  //意思就是点击后调用的是hi1对象里面的report方法
  [btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

  //再增加一个按钮
  UIButton *btn2=[UIButton buttonWithType:UIButtonTypeContactAdd];
  btn2.frame=CGRectMake(30, 80, 300, 30);
  //这个增加联系人按钮其实也是一个矩形,和上面的一样,都是继承自UIControl,而后者又继承自UIView,所以是矩形
  //虽然按钮就一点点大,但点击整个矩形区域都是相当于点击按钮
  btn2.backgroundColor=[UIColor greenColor];
  //设置标签
  btn2.tag=2;
  //增加事件:和btn1调用同一个方法,但问题是我们如果需要区分是哪个按钮的话,就需要用到tag,并且把控件作为参数传递给btnClick
  [btn2 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

  //再增加一个最常用的Custom按钮,其他按钮自己尝试
  UIButton *btn3=[UIButton buttonWithType:UIButtonTypeCustom];
  btn3.frame=CGRectMake(30 , 150 , 300, 90);
  btn3.backgroundColor=[UIColor redColor];
  btn3.tag=3;
  [btn3 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
  //设置图片背景被点击时变暗(但没有图片背景时则无效果)
  btn3.adjustsImageWhenHighlighted=YES;
  //所以,增加图片方式之一是增加背景图片,这个图片如小会被放大充满整个背景
  [btn3 setBackgroundImage:[UIImage imageNamed:@"logo.png"] forState:UIControlStateNormal];
  //还有一种增加图片的方式,是在按钮上面加而不是背景,这种方式不会缩放图片,而且会居中
  [btn3 setImage:[UIImage imageNamed:@"logo.png"] forState:UIControlStateNormal];
  //设置按钮文字,增加的文字会和setImage图片一并居中,图片在左边,文字紧随其后
  [btn3 setTitle:@"自定义按钮" forState:UIControlStateNormal];
  //如果需要重新排版这个图片和按钮文字的位置,则需要重写UIButton类里面的两个函数,点击UIButton可查看
  //- (CGRect)titleRectForContentRect:(CGRect)contentRect;文字相对于按钮的位置
  //- (CGRect)imageRectForContentRect:(CGRect)contentRect;图片相对于按钮的位置
  //第一步:可以重新定义一个UIButton类叫myButton,在.m里重写如下函数
  //- (CGRect)titleRectForContentRect:(CGRect)contentRect{  //    return CGRectMake(50, 25, 100, 40);
  //}
  //- (CGRect)imageRectForContentRect:(CGRect)contentRect{  //    return CGRectMake(150, 25, 40, 40);
  //}
  //第二步,在这个文件中引入myButton.h头文件,然后实例化btn3的时候,用myButton,而不用原始的UIButton
  //myButton相当于稍微定制了一下原生的UIButton,所以前者实例出得对象也就具有定制效果
  //这种方式仅对UIButtonTypeCustom有效,其他无效

  //把三个按钮显示出来
  [self.view addSubview:btn1];
  [self.view addSubview:btn2];
  [self.view addSubview:btn3];
  [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.
}
//增加一个参数,即由原先的-(void)btnClick{}变成如下
//因为我们知道这里都是按钮对象,所以可以用(UIButton *)sender,但通常我们用通用指针id
-(void)btnClick:(id)sender{
  //把传递过来的控件参数转化成按钮
  UIButton *btn=(UIButton *)sender;
  //把btn.tag转化成整型
  NSLog(@"OMG,it is %i",(int)btn.tag);
}

【iOS开发-8】UIButton类型属性简单归纳以及自定义按钮的设置相关推荐

  1. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  2. iOS开发之百度地图的简单集成——标注POI检索

    iOS开发之百度地图的简单集成--标注&POI检索 .h文件 // Created by XK_Recollection on 16/6/15. // Copyright © 2016年 GN ...

  3. IOS开发—— 获取AppDelegate的属性或字段

    IOS开发-- 获取AppDelegate的属性或字段 其它控制器中: AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplicat ...

  4. IOS开发基础之绘制饼图、柱状图、自定义进度条

    IOS开发基础之绘制饼图.柱状图.自定义进度条 源码在我的主页里 1.绘制饼图 效果 源码 // LJView.m // 34-绘图饼图 // Created by 鲁军 on 2021/2/23. ...

  5. IOS开发UISearchBar失去第一响应者身份后,取消按钮不执行点击事件的问题

    在iOS开发中,使用UISearchBar的时候,当搜索框失去焦点的时候,取消按钮是默认不能点击的,如图按钮的颜色是灰色的:    这是因为此时取消按钮的enabled属性被设置为NO了,那么当我们需 ...

  6. IOS升级到13后发现左划的自定义按钮不存在了,但是事件依旧可以响应

    今天,升级到IOS13后,发现原来的左划按钮,不存在了,但是按钮位置的时间响应确实存在的. 经过输出日志,定位问题终于发现了原因. 原来关键绘制左划自定义按钮代码如下: for (UIView *su ...

  7. iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)

    很多APP都会涉及到搜索框,苹果也为我们提供了默认的搜索框UISearchBar.但实际项目中我们通常需要更改系统默认搜索框的样式.为了实现这一目标,我们需要先搞懂 UISearchBar 的属性及方 ...

  8. iOS开发UI篇—xib的简单使用

    一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: Xib是轻量级的,用来描述局部的UI ...

  9. iOS开发中@property的属性weak nonatomic strong readonly等介绍

    @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后的版本,@synthesize可以省略. 1.atomic与nonatomic ...

最新文章

  1. 大脑通过统计推理表征“自我”
  2. Transform Model
  3. 大型Java项目架构演进
  4. 醒醒,迪卡侬请停止“低调”!
  5. python问题解决了吗_Python 问题怎么解决?
  6. scala基础之特质trait
  7. matlab将常值函数转换为变量,MATLAB与科学计算期末复习题题库15.11.12
  8. 基于 socket.io 实现实时你画我猜游戏
  9. VSTO 3.0 for Office 2007 Programming
  10. 【BABY夜谈大数据】基于内容的推荐
  11. x264 编码数配置
  12. 奇偶校验码海明码循环冗余校验码
  13. excel2019批量删除空白行的方法
  14. 有证无车的程序猿如何查询档案编号、添加电子驾驶证(支付宝、微信)
  15. xp 无法关闭计算机,xp系统不能关机解决方法
  16. USBWebserver(网站架设工具)
  17. 不同空间任务要求下认知地图的神经表征
  18. HP笔记本电源灯亮不能开机 - 静电问题
  19. Adam和学习率衰减(learning rate decay)
  20. 配制ubuntu - 使用大全整理 (其中有转载内容,如果有您的文章,请与我联系,我将加入你的名称)

热门文章

  1. 最新 Windows 7 7100安装
  2. 电脑图标有阴影如何去除
  3. js时间日期友好显示
  4. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs
  5. Yii学习笔记:利用setFlash和runController打造个性化的提示信息页面
  6. linux 软件包的安装
  7. ACTIVEMQ 发布与订阅
  8. 远程计算机无法操作,Win10系统下qq远程不能控制对方电脑(点不动)的完全解决方法...
  9. linux wine 中文乱码,Linux下使用Wine出现中文乱码的解决方法
  10. Python Module_subprocess_调用 Powershell