【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);
}
时间: 2024-10-07 14:33:43

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

ios开发中UIButton的使用(一)

ios开发中UIButton的使用(一) 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状态 normal(普通状态) 默认情况(Default) 对应的枚举常量:UIControlStateNormal highlighted(高亮状态) 按钮被按下去的时候(手指还未松开) 对应的枚举常量:UIControlStateHighlighted disabled(失效状态,不可用状态

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

iOS开发UI篇—xib的简单使用 一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: Xib是轻量级的,用来描述局部的UI界面 Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系 二.xib的简单使用 1.建立xib文件 建立的xib文件命名为appxib.xib 2.对xib进行设置 根据程序的需要,这里把view调整为自由布局 建立vie

文顶顶 iOS开发UI篇—xib的简单使用

iOS开发UI篇—xib的简单使用 一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: Xib是轻量级的,用来描述局部的UI界面 Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系 二.xib的简单使用 1.建立xib文件 建立的xib文件命名为appxib.xib 2.对xib进行设置 根据程序的需要,这里把view调整为自由布局 建立vie

文顶顶 iOS开发UI篇—transframe属性(形变)

iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建“基于控件初始位置”的形变 CGAffineTransformMakeTranslation(平移) CGAffineTransformMakeScale(缩放) CGAffineTransformMakeRotation(旋转) (2) 创建“基于transform参数”的形变

iOS开发UI基础—xib的简单使用

iOS开发UI基础-xib的简单使用 一.简单介绍 xib和stotyboard的比较,一个轻量级一个重量级. 二.xib的简单使用 1.建立xib文件 建立的xib文件命名为appxib.xib 2.对xib进行设置 根据程序的需要,这里把view调整为自由布局 建立view模型(设置长宽等参数) 调整布局和内部的控件 完成后的单个view 3.使用xib文件的代码示例 YYViewController.m文件代码如下: 1 // 2 // YYViewController.m 3 // 10

iOS开发UI基础—transframe属性(形变)

iOS开发UI基础-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建"基于控件初始位置"的形变 CGAffineTransformMakeTranslation(平移) CGAffineTransformMakeScale(缩放) CGAffineTransformMakeRotation(旋转) (2) 创建"基于trans

iOS开发UI篇—实现一个简单的手势解锁应用(基本)

iOS开发UI篇—实现一个简单的手势解锁应用(基本) 一.实现效果 实现效果图: 二.手势解锁应用分析 1.监听手指在view上的移动,首先肯定需要自定义一个view,重写touch began,touch move等方法,当手指移动到圈上时,让其变亮.可以通过button按钮来实现. 2.界面搭建 背景图片(给控制器的view添加一个imageview,设置属性背景图片) 九个按钮(把九个按钮作为一个整体,使用一个大的view来管理这些小的view,这些小的view就是9个button.如果使

iOS开发UI篇—实现一个简单的手势解锁应用(完善)

iOS开发UI篇—实现一个简单的手势解锁应用(完善) 一.需要实现的效果 二.应用完善 1.绘制不处于按钮范围内的连线 2.解决bug(完善) bug1:如果在began方法中通知view绘图,那么会产生bug.因为,当前点没有清空,在手指移开之后要清空当前点.可以在绘制前进行判断,如果当前点是(0,0)那么就不划线.或者在began方法中不进行重绘. bug2:无限菊花.自定义view的背景色为默认的(黑色),只要重写了drawrect方法,view默认的背景颜色就是黑色的,因为上下文默认的颜

李洪强iOS开发Swift篇—09_属性

李洪强iOS开发Swift篇—09_属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要1个.swift文件 Swift中类的定义格式 1 class 类名 { 2 // ... 属性和方法 3 } 二.属性 1.什么是属性 Swift中的属性(Properties),就类似于其他面向对象语言中的成员变量 2.属性的分类 按照官方文档的说明,属性可以分为以下几种 (1)存储属性(Sto