IOS之按钮控件--Button全解析及使用

转载自:forget 

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

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

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

至于UIButton的创建

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

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

第一种:setBackGroudImage:图片被拉伸

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

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

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

给button设置成圆形

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

给button设置阴影

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

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

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

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


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

  1. button.showsTouchWhenHighlighted = YES;

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

UIButton 解析的更多相关文章

  1. UIButton的resizableImageWithCapInsets使用解析

    UIButton的resizableImageWithCapInsets使用解析 效果: 使用的源文件: 源码: // // ViewController.m // SpecialButton // ...

  2. xml文件解析(解析以后在RootTableViewController输出)

    这是从美团弄得xml文件,地区和经纬度. 你点了地区以后 ,  就可以查看经纬度 ,因为笔者懒, 有现成的文本框 , 所有偷懒了. 下面是一些枯燥的代码了 . #import <UIKit/UI ...

  3. 【原】iOS学习38网络之数据解析

    1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...

  4. 系统自带的NSJSONSerialization解析json文件

    #import "ViewController.h" #import "Student.h" #import "GDataXMLNode.h" ...

  5. JSONKit解析json数据

    先将第三方文件拖进工程 JSONKit.h和JSONKit.m 然后设置在ARC工程中添加MRC文件,如下图所示 #import "ViewController.h" #impor ...

  6. 【原】IOS中KVO模式的解析与应用

    最近老翁在项目中多处用到了KVO,深感这种模式的好处.现总结如下: 一.概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单 ...

  7. 解析iOS开发中的FirstResponder第一响应对象

    1. UIResonder 对于C#里所有的控件(例如TextBox),都继承于Control类.而Control类的继承关系如下: 代码如下: System.Object System.Marsha ...

  8. iOS开发——XML/JSON数据解析

    NSJSONSerialization 接下来就正式开始.苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂. 首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要 ...

  9. **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)

    使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...

随机推荐

  1. iOS UIApplication 里面各const实际用意

    //后台通知:屏幕操作通知等等 UIKIT_EXTERN NSString *const UIApplicationDidEnterBackgroundNotification       NS_AV ...

  2. 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载

    解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...

  3. linux fdisk

    fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段 我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了:通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称:比如上 ...

  4. Git合并分支出现的冲突解决

    人生不如意之事十有八九,合并分支往往也不是一帆风顺的. 我们准备新的分支newbranch. LV@LV-PC MINGW32 /c/gitskill (master)$ git checkout - ...

  5. .NET面试题目一

    简单介绍下ADO.NET和ADO主要有什么改进? 答:ADO以Recordset存储,而ADO.NET则以DataSet表示,ADO.NET提供了数据集和数据适配器,有利于实现分布式处理,降低了对数据 ...

  6. Ansible5:常用模块【转】

    根据zs官方的分类,将模块按功能分类为:云模块.命令模块.数据库模块.文件模块.资产模块.消息模块.监控模块.网络模块.通知模块.包管理模块.源码控制模块.系统模块.单元模块.web设施模块.wind ...

  7. Linux系统故障处理案例(一)【转】

    2016-08-05 14:41 运行环境:CentOS6.7 故障原因: 昨天在线执行命令yum -y update 在命令执行途中,强制中断并直接运行poweroff命令关机.再次开机出现如图所示 ...

  8. AJAX程序实验

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 < ...

  9. mysql 中tinytext、text、mediumtext和longtext详解

    一.数字类型 类型 范围 说明   Char(N) [ binary] N=1~255 个字元binary :分辨大小写 固定长度 std_name cahr(32) not null VarChar ...

  10. 转: Ant 脚本的结构化设计

    引言 Ant 脚本是由 Apache 提供的一种基于 Java 的构建工具,为 Java 开发人员所熟悉.Java 开发人员使用 Ant 脚本可以很方便地完成 Java 开发过程中常见的如拷贝文件.创 ...