【iOS开发-8】UIButton类型属性简单归纳以及自定义按钮的设置
(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类型属性简单归纳以及自定义按钮的设置相关推荐
- iOS开发UI篇—transframe属性(形变)
iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...
- iOS开发之百度地图的简单集成——标注POI检索
iOS开发之百度地图的简单集成--标注&POI检索 .h文件 // Created by XK_Recollection on 16/6/15. // Copyright © 2016年 GN ...
- IOS开发—— 获取AppDelegate的属性或字段
IOS开发-- 获取AppDelegate的属性或字段 其它控制器中: AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplicat ...
- IOS开发基础之绘制饼图、柱状图、自定义进度条
IOS开发基础之绘制饼图.柱状图.自定义进度条 源码在我的主页里 1.绘制饼图 效果 源码 // LJView.m // 34-绘图饼图 // Created by 鲁军 on 2021/2/23. ...
- IOS开发UISearchBar失去第一响应者身份后,取消按钮不执行点击事件的问题
在iOS开发中,使用UISearchBar的时候,当搜索框失去焦点的时候,取消按钮是默认不能点击的,如图按钮的颜色是灰色的: 这是因为此时取消按钮的enabled属性被设置为NO了,那么当我们需 ...
- IOS升级到13后发现左划的自定义按钮不存在了,但是事件依旧可以响应
今天,升级到IOS13后,发现原来的左划按钮,不存在了,但是按钮位置的时间响应确实存在的. 经过输出日志,定位问题终于发现了原因. 原来关键绘制左划自定义按钮代码如下: for (UIView *su ...
- iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)
很多APP都会涉及到搜索框,苹果也为我们提供了默认的搜索框UISearchBar.但实际项目中我们通常需要更改系统默认搜索框的样式.为了实现这一目标,我们需要先搞懂 UISearchBar 的属性及方 ...
- iOS开发UI篇—xib的简单使用
一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: Xib是轻量级的,用来描述局部的UI ...
- iOS开发中@property的属性weak nonatomic strong readonly等介绍
@property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后的版本,@synthesize可以省略. 1.atomic与nonatomic ...
最新文章
- 大脑通过统计推理表征“自我”
- Transform Model
- 大型Java项目架构演进
- 醒醒,迪卡侬请停止“低调”!
- python问题解决了吗_Python 问题怎么解决?
- scala基础之特质trait
- matlab将常值函数转换为变量,MATLAB与科学计算期末复习题题库15.11.12
- 基于 socket.io 实现实时你画我猜游戏
- VSTO 3.0 for Office 2007 Programming
- 【BABY夜谈大数据】基于内容的推荐
- x264 编码数配置
- 奇偶校验码海明码循环冗余校验码
- excel2019批量删除空白行的方法
- 有证无车的程序猿如何查询档案编号、添加电子驾驶证(支付宝、微信)
- xp 无法关闭计算机,xp系统不能关机解决方法
- USBWebserver(网站架设工具)
- 不同空间任务要求下认知地图的神经表征
- HP笔记本电源灯亮不能开机 - 静电问题
- Adam和学习率衰减(learning rate decay)
- 配制ubuntu - 使用大全整理 (其中有转载内容,如果有您的文章,请与我联系,我将加入你的名称)
热门文章
- 最新 Windows 7 7100安装
- 电脑图标有阴影如何去除
- js时间日期友好显示
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs
- Yii学习笔记:利用setFlash和runController打造个性化的提示信息页面
- linux 软件包的安装
- ACTIVEMQ 发布与订阅
- 远程计算机无法操作,Win10系统下qq远程不能控制对方电脑(点不动)的完全解决方法...
- linux wine 中文乱码,Linux下使用Wine出现中文乱码的解决方法
- Python Module_subprocess_调用 Powershell