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

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

(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);
}
目录
相关文章
|
4天前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
28天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
121 66
|
14天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
1月前
|
JavaScript 前端开发 iOS开发
ios样式开关按钮jQuery插件
ios样式开关按钮jQuery插件
53 7
|
1月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
122 3
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
41 2