IOS开发中伴随我们始终的 最常用的几个空间之一 -- UIButton 按钮,对于button今天在此做一些浅析,并介绍下主流用法以及常见问题解决办法.

首先是继承问题,UIButton继承于UIControl,而UIControl继承于UIView.

那么UIButton自然继承了UIView的属性.比如frame,layer等

至于UIButton的创建

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor = [UIColor clearColor];
button.frame = CGRectMake(90, 90, 51, 24);
// // 内存: 不需要释放 因为是便利构造器
[button setTitle:@"请点击" forState:UIControlStateNormal]; // 正常状态
[button setTitle:@"点击中" forState:UIControlStateHighlighted]; // 高亮状态
[button setTitle:@"已点击" forState:UIControlStateSelected]; button.selected = NO;
self.isSelected = 0;
[button setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor yellowColor] forState:UIControlStateSelected];
// 按钮字体大小
button.titleLabel.font = [UIFont systemFontOfSize:30];
// 设置前景图片 (当button frame改变的时候 图片不变)
[button setImage:[UIImage imageNamed:@"BtnOff@2x.png"] forState:UIControlStateNormal]; // 禁止按钮按下颜色变深效果
button.adjustsImageWhenHighlighted = NO; [button setImage:[UIImage imageNamed:@"IconAdd.png"] forState:UIControlStateHighlighted];
// 设置背景图片 (当button frame改变的时候 图片不变)
// 创建一个UIImage对象, 图片对象
[button setBackgroundImage:[UIImage imageNamed:@"FrendAdd.png"] forState:UIControlStateNormal]; // 正常
[button setBackgroundImage:[UIImage imageNamed:@"IconAdd.png"] forState:UIControlStateHighlighted]; // 高亮 // button最核心的方法
// 1.target 目标 就是button指定谁去执行方法
// 2.action 方法 就是执行什么
// 3.evunts 就是点击按钮时的状态
// 4.UIControlEventTouchUpInside 当手离开触发
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[self.window addSubview:button];

对于在button上加图片有2种方式

第一种:setBackGroudImage:图片被拉伸

第二种:setImage:  图片保持原大小

注意设置图片时可能会出现渲染问题 此时的解决办法

// 处理图片渲染问题
UIImage *setImage = [UIImage imageNamed:@"setImage"];
UIImage *newSetImage = [setImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

给button设置成圆形

// 设置button的圆角半径,这样按钮就变成了园的
button.layer.cornerRadius = 50;
// 将button上的图片一样变成圆形
[button.layer masksToBounds];
// 添加边框
button.layer.borderWidth = 3;
// 边框颜色 注意要加.CGColor属性
button.layer.borderColor = [UIColor orangeColor].CGColor;

给button设置阴影

// 设置阴影 横坐标向右 纵坐标向下 可负值
button.layer.shadowOffset = CGSizeMake(1, 1);

同时设置button上有文字和图片,并且同时实现点击效果

//    在UIButton中有三个对EdgeInsets的设置:ContentEdgeInsets、titleEdgeInsets、imageEdgeInsets  
    [button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];//给button添加image  
//设置image在button上的位置(上top,左left,下bottom,右right)这里可以写负值,对上写-10,那么image就象上移动10个像素  

button.imageEdgeInsets = UIEdgeInsetsMake(5,13,21,button.titleLabel.bounds.size.width);


button如果设置了图片的情况下 还有一个酷炫的点击效果

button.showsTouchWhenHighlighted = YES;

以上适合于IOS初学者对于button的使用,button的一些常用主流实现功能以及常见的需求逻辑

版权声明:本文为博主原创文章,未经博主允许不得转载。

IOS之按钮控件--Button全解析及使用 分类: ios技术 2015-01-17 17:09 169人阅读 评论(0) 收藏的更多相关文章

  1. android开发之AlertDialog点击按钮之后不消失 分类: android 学习笔记 2015-07-15 18:07 89人阅读 评论(0) 收藏

    最近有这样一个需求,我需要用户在一个弹出框里输入密码来验证,验证成功当然好说,但是如果验证失败则需要把alertdialog的标题改为"密码错误,请重新输入",并且这个alertd ...

  2. 全面解析sizeof(下) 分类: C/C++ StudyNotes 2015-06-15 10:45 263人阅读 评论(0) 收藏

    以下代码使用平台是Windows7 64bits+VS2012. sizeof作用于基本数据类型,在特定的平台和特定的编译中,结果是确定的,如果使用sizeof计算构造类型:结构体.联合体和类的大小时 ...

  3. 全面解析sizeof(上) 分类: C/C++ StudyNotes 2015-06-15 10:18 188人阅读 评论(0) 收藏

    以下代码使用平台是Windows7 64bits+VS2012. sizeof是C/C++中的一个操作符(operator),其作用就是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对齐有个全 ...

  4. UI基础:UI程序执行顺序(UIApplicationMain()函数),自定义视图 分类: iOS学习-UI 2015-07-02 22:09 68人阅读 评论(0) 收藏

    UI程序的一般执行顺序: 先进入main里面,执行函数UIApplicationMain(),通过该函数创建应用程序对象和指定其代理并实现监听,当执行函数UIApplicationMain()时还会做 ...

  5. iOS开源库--最全的整理 分类: ios相关 2015-04-08 09:20 486人阅读 评论(0) 收藏

    youtube下载神器:https://github.com/rg3/youtube-dl 我擦咧 vim插件:https://github.com/Valloric/YouCompleteMe vi ...

  6. C# WinForm 透明控件 PictureBox透明 分类: WinForm 2014-07-30 13:27 591人阅读 评论(0) 收藏

    1.要实现C# WinForm中的控件与背景的透明,可以通过设置控件的BackColor属性为Transparent,同时设置其父控件.因为在C#中,控件的透明指对父窗体透明.如果不设置Parent属 ...

  7. NavBarControl控件 2015-07-23 16:56 2人阅读 评论(0) 收藏

    NavBarControl控件 1.      新建一个windows窗体应用程序项目 2.      在工具箱中的Navigation& Layout选项卡下找到NavBarControl, ...

  8. 窗体控件 回车事件 分类: WinForm 2014-11-21 10:45 233人阅读 评论(0) 收藏

    说明: (1)设置窗体控件的TabIndex属性,(按回车顺序设置TabIndex的大小) (2)修改窗体的一个属性:KeyPreview=true //protected override void ...

  9. winform 跨窗体给控件传值 分类: WinForm 2014-08-02 16:33 195人阅读 评论(0) 收藏

    两个窗体 FormA,FormB; FormA窗体中有一文本框控件:TextBox; FormB窗体中有一变量:txtJSJ 目的:把变量赋值给文本框 实现: 设置TextBox属性: Modifie ...

随机推荐

  1. bg-route

    1.目录 homework add.html online.html offline.html res script action homework add.js 2.add.html<div ...

  2. sqlserver低版本生成插入脚本

    --将表数据生成SQL脚本的存储过程 CREATE PROCEDURE dbo.UspOutputData @tablename sysname AS declare @column varchar( ...

  3. 快速批量插入sqlserver方法之我见

    ---------------------------------------------------------------------------------------------------- ...

  4. cocos2d-x中使用tinyxml遇到的问题及解决

    1.问题: cocos2d-x集成tinyxml后在vs下运行正常,但是在Android下在读取xml文件时发生异常,读取时使用的是LoadFile函数 2. 解决方案: 先把xml文件内容读取到内存 ...

  5. PE文件格式详解(下)

    作者:MSDN译者:李马 预定义段 一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text..bss..rdata..data..rsrc..edata..idata..pdata ...

  6. C# 实现屏幕键盘 (ScreenKeyboard)

    原文地址:http://www.cnblogs.com/youzai/archive/2008/05/19/1202732.html 要实现一个屏幕键盘,需要监听所有键盘事件,无论窗体是否被激活.因此 ...

  7. idea编译报错:未结束的字符串文字;非法的表达式;未结束的字符串字面值

    在idea的Settings中,找到File Encodings,将IDE Encoding 改为UTF-8 要多试几次,清除缓存什么的,具体原因不知道,不过经常第一次修改不能成功.

  8. cannot create windows service for mysql

    这安装完mysql启动的时候总是弹出不能启动错误,解决办法: 先卸载掉MySQL干净:把关于MySQL所有目录及文件都删除掉,还有把注册表删除干净.在注册表找到以下项目并删除:HKEY_LOCAL_M ...

  9. linux的学习系列 8---进程管理

    当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中的程序 ...

  10. Android实现播放GIF动画的强大ImageView

    我个人是比较喜欢逛贴吧的,贴吧里总是会有很多搞笑的动态图片,经常看一看就会感觉欢乐很多,可以释放掉不少平时的压力.确实,比起一张单调的图片,动态图片明显更加的有意思.一般动态图片都是GIF格式的,浏览 ...