Button的设置及各种属性

(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的类,然后对这个类进行重写函数,相当于定制,最后用这个类去创建按钮,这些按钮也就具有自定义的样式(这种方法只针对自定义按钮类型有效)。

 1 - (void)viewDidLoad {
 2   //生成一个btn1对象,不需要alloc和init,而是直接用内置的工厂方法,有很多可CMD+点击查看
 3   UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
 4   //设置位置和宽高
 5   btn1.frame=CGRectMake(30, 30, 300, 30);
 6   //设置按钮的文字,状态有好几种常用的时Normal和Highlighted(点击时状态),可CMD+点击查看
 7   [btn1 setTitle:@"点我啊!" forState:UIControlStateNormal];
 8   //设置点击时的文本
 9   [btn1 setTitle:@"我被点了!" forState:UIControlStateHighlighted];
10   //设置文字颜色
11   [btn1 setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
12   [btn1 setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
13   //设置点击时按钮背景颜色,呃,完全不起作用,即无效果
14   [btn1 setTintColor:[UIColor purpleColor]];
15   //点击时按钮发光,就是在按钮中间发亮光,这个有效果
16   btn1.showsTouchWhenHighlighted=YES;
17   //设置tag标签,唯一标记用,可用于分辨是哪个按钮控件
18   btn1.tag=1;
19   //设置背景颜色
20   btn1.backgroundColor=[UIColor redColor];
21   //现在高版本的iOS里这个方法会让人抓狂,因为我们发现,不设置背景时,圆角按钮没有边框,所以上面设置frame其实意义不大
22   //设置了背景或者图片后,背景是矩形,说好的圆角呢?坑爹呢!
23   //所以现在大多数开发都是用UIButtonTypeCustom,而不是UIButtonTypeRoundedRect
24   
25   //最重要的添加触发事件用户交互
26   //self是指调用哪个对象的方法
27   //btnClick:是调用的方法,btnClick和btnClick:不一样,后者表示有参数
28   //UIControlEventTouchUpInside是触发事件,有很多,可以CMD+点击查看
29   //这里三个参数都可以随意更换,比如新建一个类Hi,在类里定义一个方法-(void)report;
30   //然后在此文件引入Hi.h头文件,在这里实例化一个对象hi1,然后就可以用hi1代替self,用report代替btnClick
31   //意思就是点击后调用的是hi1对象里面的report方法
32   [btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
33   
34   //再增加一个按钮
35   UIButton *btn2=[UIButton buttonWithType:UIButtonTypeContactAdd];
36   btn2.frame=CGRectMake(30, 80, 300, 30);
37   //这个增加联系人按钮其实也是一个矩形,和上面的一样,都是继承自UIControl,而后者又继承自UIView,所以是矩形
38   //虽然按钮就一点点大,但点击整个矩形区域都是相当于点击按钮
39   btn2.backgroundColor=[UIColor greenColor];
40   //设置标签
41   btn2.tag=2;
42   //增加事件:和btn1调用同一个方法,但问题是我们如果需要区分是哪个按钮的话,就需要用到tag,并且把控件作为参数传递给btnClick
43   [btn2 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
44   
45   //再增加一个最常用的Custom按钮,其他按钮自己尝试
46   UIButton *btn3=[UIButton buttonWithType:UIButtonTypeCustom];
47   btn3.frame=CGRectMake(30 , 150 , 300, 90);
48   btn3.backgroundColor=[UIColor redColor];
49   btn3.tag=3;
50   [btn3 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
51   //设置图片背景被点击时变暗(但没有图片背景时则无效果)
52   btn3.adjustsImageWhenHighlighted=YES;
53   //所以,增加图片方式之一是增加背景图片,这个图片如小会被放大充满整个背景
54   [btn3 setBackgroundImage:[UIImage imageNamed:@"logo.png"] forState:UIControlStateNormal];
55   //还有一种增加图片的方式,是在按钮上面加而不是背景,这种方式不会缩放图片,而且会居中
56   [btn3 setImage:[UIImage imageNamed:@"logo.png"] forState:UIControlStateNormal];
57   //设置按钮文字,增加的文字会和setImage图片一并居中,图片在左边,文字紧随其后
58   [btn3 setTitle:@"自定义按钮" forState:UIControlStateNormal];
59   //如果需要重新排版这个图片和按钮文字的位置,则需要重写UIButton类里面的两个函数,点击UIButton可查看
60   //- (CGRect)titleRectForContentRect:(CGRect)contentRect;文字相对于按钮的位置
61   //- (CGRect)imageRectForContentRect:(CGRect)contentRect;图片相对于按钮的位置
62   //第一步:可以重新定义一个UIButton类叫myButton,在.m里重写如下函数
63   //- (CGRect)titleRectForContentRect:(CGRect)contentRect{
64   //    return CGRectMake(50, 25, 100, 40);
65   //}
66   //- (CGRect)imageRectForContentRect:(CGRect)contentRect{
67   //    return CGRectMake(150, 25, 40, 40);
68   //}
69   //第二步,在这个文件中引入myButton.h头文件,然后实例化btn3的时候,用myButton,而不用原始的UIButton
70   //myButton相当于稍微定制了一下原生的UIButton,所以前者实例出得对象也就具有定制效果
71   //这种方式仅对UIButtonTypeCustom有效,其他无效
72   
73   //把三个按钮显示出来
74   [self.view addSubview:btn1];
75   [self.view addSubview:btn2];
76   [self.view addSubview:btn3];
77   [super viewDidLoad];
78   // Do any additional setup after loading the view, typically from a nib.
79 }
80 //增加一个参数,即由原先的-(void)btnClick{}变成如下
81 //因为我们知道这里都是按钮对象,所以可以用(UIButton *)sender,但通常我们用通用指针id
82 -(void)btnClick:(id)sender{
83   //把传递过来的控件参数转化成按钮
84   UIButton *btn=(UIButton *)sender;
85   //把btn.tag转化成整型
86   NSLog(@"OMG,it is %i",(int)btn.tag);
87 }

 

转载于:https://www.cnblogs.com/crazygeek/p/5487021.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『技术群里聊些啥』Task 不是你想 Cancel,想 Cancel 就能 Cancel

前言在群里看到有人问如何取消这个 Task 的执行:实际上这并不会取消S1eepMode1方法的执行:这是为什么呢?原因首先,让我们看看s_cts.Cancel()都做了啥:public void Cancel() > Cancel(false);public void Cancel(boo…

SQL Server数据库锁的类型、用法及注意事项详解

一、为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新:A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读:A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数…

Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别

一、 HashMap 1)底层实现 数组链表红黑树(在JDK1.8中如果链表长度大于8的时候才转换为红黑树) 2)是否线程安全不支持线程的同步,线程不安全,如需同步,可用Collections的synchronizedMap方法或者使用Concu…

《零基础看得懂的C语言入门教程 》——(八)了解基本数组还不是那么简单

一、学习目标 了解数组的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇:(二)C语言没那么难简单开发带你了解流程 第…

推导坐标旋转公式(转)

在《Flash actionScript 3.0 动画教程》一书中有一个旋转公式: x1cos(angle)*x-sin(angle)*y; y1cos(angle)*ysin(angle)*x; 其中x,y表示物体相对于旋转点旋转angle的角度之前的坐标,x1,y1表示物体旋转angle后相对于旋转点的坐标 …

任务管理平台_jytask一个任务调度统一管理平台

task介绍和使用https://gitee.com/yuejing/task 下的文档:[doc/task介绍和使用.docx]task是什么?task是一个任务调度统一管理平台。 目前主要是通过http来进行任务的调度,http支持签名算法。一张图能更加懂它是做什么的(一个集中管理任务的平…

设计一个支持百万用户的系统

设计一个支持数百万用户的系统是非常有挑战性的, 这是一个需要不断调整和优化的过程, 接下来的内容中, 我将构建一个系统, 从单个用户开始,到最后支持数百万的用户。从单个服务开始 千里之行,始于足下,让我们从最简单的单个服务开始。所有的…

SQL Server T-SQL编程:数据库用户与安全设置

目录 一、数据库的注册、用户建立 二 、用户安全设置:角色

原百万访问量博客http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)...

原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(数百篇oracle/teradata性能优化、故障处理原创文章)转载于:https://www.cnblogs.com/zhjh256/p/5497797.html

《零基础看得懂的C语言入门教程 》——(九)C语言二维数组与循环嵌套

一、学习目标 了解二维数组的使用方法了解循环嵌套的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇:(二)C语言没那么…

LRU算法

1 LRU算法 LRU(Least recently used,最近最少使用)根据数据的历史访问记录来进行淘汰数据,思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 2 具体实现过程 新数据插入到链表头部; 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 当链表满…

Scala-2.13.0 安装及配置

Scala 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运…

检测python进程是否存活

crontab -e */3 * * * * /data/log_realtime/check.sh > /data/log_realtime/check.log 2>&1 1 0 1 * * /data/jx3log_import_realtime/shutdown.sh 说明:每3分钟检查一次进程是否存在,每个月1号0点1分杀掉进程,重启 check.sh cd …

中科大镜像源_JETPACK4.4安装软件和备份镜像的方法介绍

一、使用SDK Manager的文件夹安装Jetson软件(以NX为例)当JETPACK安装出现错误的时候,可以尝试下面的安装办法,前提是JETPACK4.4完整安装(即本文第三节的下载已经完成),并且选择JETSON NX的相关的下载已经完成。安装步骤:1、$cd /n…

站在前人的肩膀上重新透视C# SpanT数据结构

先谈一下我对Span的看法, Span是指向任意连续内存空间的类型安全、内存安全的视图,可操作的滑动窗口。Span和Memory都是包装了可以在pipeline上使用的结构化数据的内存缓冲器,他们被设计用于在pipeline中高效传递数据。定语解读这里面许多定语&#xff0…

集合学习

List集合:ArrayList集合基于动态数组结构,查询优,LinkedList 基于链表结构 数据移动优。是一个有序的队列集合 set集合:HashSet和TreeSet 。是一个无序不重复集合 Map集合:HashMap和TreeMap。是一个KEY-VALUE映射的集合…

《零基础看得懂的C语言入门教程 》——(十)C语言的指针原来是这样

一、学习目标 了解指针的概念了解指针的使用方法了解双重指针 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言。 第一篇:(一)脱离学习误区 第二篇:(二)C语言没那…

T-SQL编程基础之一:变量与基本语句

一个标准的计算机语言,大概要提供的必要主要功能是:变量说明、分支判断、循环和输入输出结果。T-SQL也一样,具有这些功能,只不过T-SQL的输入和输出不是界面,而是表。 完全精确描述一个计算机语言,大概要很厚的书才能做到,好在目前这些书籍的发行也很多,许多书描述的都…

Java之volatile如何保证可见性和指令重排序

1 我们先了解CPU缓存 CPU缓存为了解决CPU运算速度与内存读写速度不匹配的问题,因为CPU运算速度要比内存读写速度快得多 一次主内存的访问通常在几十到几百个时钟周期一次L1高速缓存的读写只需要1~2个时钟周期一次L2高速缓存的读写也只需要数十个时钟周期 CPU大多数…

bigpipe提升网站响应速度

2019独角兽企业重金招聘Python工程师标准>>> 主要思想就是通过异步 发起一次请求,后端不关闭输出流,多个线程处理各自任务,然后分别发送到客户端。 https://github.com/4rnold/Demo-Project/tree/master/bigpipe-demohttps://gith…