文档章节

01-UI基础-05-01-UIButton : UIControl

口十耳
 口十耳
发布于 2016/01/04 19:22
字数 910
阅读 48
收藏 1

##继承关系 UIButton

##一、UIButton属性 ###1.1、UIButton状态

enum {
    UIControlStateNormal = 0, // 常规状态显现 
    UIControlStateHighlighted = 1 << 0, // 高亮状态显现 
    UIControlStateDisabled = 1 << 1, // 禁用的状态才会显现
    UIControlStateSelected = 1 << 2, // 选中状态 
    UIControlStateApplication = 0x00FF0000, // 当应用程序标志时 
    UIControlStateReserved = 0xFF000000 //为内部框架预留,可以不管他 
};

###1.2、Uibutton类型

typedef enum {
    UIButtonTypeCustom = 0, // 自定义风格
    UIButtonTypeRoundedRect, // 圆角矩形 
    UIButtonTypeDetailDisclosure, // 蓝色小箭头按钮,主要做详细说明用
    UIButtonTypeInfoLight, // 亮色感叹号
    UIButtonTypeInfoDark, // 暗色感叹号
    UIButtonTypeContactAdd // 十字加号按钮
} UIButtonType;

###1.3、文字、图标等

// 给按钮设置文字时,苹果文档说明,不能使用label对象设置文字的颜色或者阴影颜色,相反必须使用setTitleColor:forState: and setTitleShadowColor:forState:这两个方法才能修改

// 设置对应状态的标题内容default is nil. title is assumed to be single line
- (void)setTitle:(NSString *)title forState:(UIControlState)state;  
// 设置对应状态的标题颜色           
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;   

// 设置对应状态的标题阴影颜色            
- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state;         

// 设置对应状态的按钮的图片
- (void)setImage:(UIImage *)image forState:(UIControlState)state;        
// 设置对应状态的按钮背景图片
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state; 

###1.4、adjustsImageWhenDisabled

当按钮禁用的情况下,图像的颜色会被画深一点,默认为YES。

###1.5、adjustsImageWhenHighlighted

当按钮高亮的情况下,图像的颜色会被画深一点,默认为YES。

###1.6、showsTouchWhenHighlighted

button.showsTouchWhenHighlighted=YES;点击时的闪光效果会被前景图片遮住中间部分;也就是设置按钮按下会发光

###1.7、contentEdgeInsets

设置按钮的内部内容(包含按钮图片和标题)离按钮边缘上下左右的距离。

UIEdgeInsets insets; // 设置按钮内部图片间距
insets.top = insets.bottom = insets.right = insets.left = 10;
bt.contentEdgeInsets = insets;
bt.titleEdgeInsets = insets; // 标题间距

###1.8、文字显示位置、字体的大小、字体颜色

  • 显示位置
btn.frame = CGRectMake(x, y, width, height);
[btn setTitle: @"search" forState: UIControlStateNormal];

设置按钮上的自体的大小

[btn setFont: [UIFont systemFontSize: 14.0]];    //这种可以用来设置字体的大小,但是可能会在将来的SDK版本中去除改方法

应该使用

btn.titleLabel.font = [UIFont systemFontOfSize: 14.0];
[btn seBackgroundColor: [UIColor blueColor]];

最后将按钮加入到指定视图superView

[superView addSubview: btn];
  • 字体大小、颜色

初始化button

tvnamelabel=[[UIButton alloc]initWithFrame:CGRectMake(5,5,200,40)];

这样初始化的button,文字默认颜色是白色的,所有如果背景也是白色的话,是看不到文字

btn.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft ;//设置文字位置,现设为居左,默认的是居中
[btn setTitle:@“title”forState:UIControlStateNormal];// 添加文字
  • 对齐方式

有些时候我们想让UIButton的title居左对齐,我们设置

btn.textLabel.textAlignment = UITextAlignmentLeft;// 是没有作用的

正确的设置

btn.contentHorizontalAlignment = UIControlContentHorizonAlignmentLeft;

但是此时文字会紧贴到左边框,我们可以设置

btn.contentEdgeInsets = UIEdgeInsetsMake(0,10, 0, 0);
// 使文字距离做边框保持10个像素的距离。

设置UIButton上字体的颜色设置UIButton上字体的颜色,不是用

[btn.titleLabel setTextColor:[UIColorblackColor]];
btn.titleLabel.textColor=[UIColor redColor];

正确地做法

[btn setTitleColor:[UIColor blackColor]forState:UIControlStateNormal];

##二、事件 ###2.1、添加事件

这些事件都是基于触摸、基于值、基于编辑。有如下事件会触发。

// 原方法声明
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 
/**controlEvents事件类型:
1. UIControlEventTouchDown      // 按下    
2. UIControlEventTouchDownRepeat  多次按下   
3. UIControlEventTouchUpInside // 在按钮及其一定外围内松开
4. UIControlEventTouchUpOutside // 按钮外面松开 
*/
// 调用样例
[button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];

###2.2、移除事件

// 原方法声明
- (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 
// controlEvents 参数同上
// 调用样例
[btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];

##三、官方文档 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIButton_Class/index.html#//apple_ref/occ/cl/UIButton

© 著作权归作者所有

口十耳
粉丝 6
博文 69
码字总数 66563
作品 0
浦东
高级程序员
私信 提问
UIImageView与UIButton

应用场合 UIImageView主要用在只显示图片,没有点击事件的情况并且处理图片更加专业,动画例子: NSMutableArray *images = [NSMutableArray array]; for (int i=0; i<sum; i++) { NSBundle ...

天边那束阳光
2014/10/01
0
0
iOS | 继承UIControl才是自定义button的正确姿势

前言 自定义按钮的方式不少,当遇到复杂的按钮时,我一般是继承UIButton,然后在button上view,这种招式简单粗暴,屡试不爽。掌握这招,从此无视任何复杂按钮。 虽说屡试不爽,但我还是有不爽...

无夜之星辰
04/18
0
0
UIButton 按钮控件-IOS开发

UIButton是一个标准的UIControl控件,所以如果你对UIControl不甚了解还是先看一下我的另一篇博文:《UIControl IOS控件编程》 一、创建 两种方法: 1. 常规的 initWithFrame 对代码创建View(...

junwong
2012/03/05
3K
1
IOS百度地图 多个BMKMapView对象问题

有两个XIB文件,主视图称为A,新建的XIB称为B,分别设置个百度mapView,当按按钮‘路线时’,进入B页面,视图没问题,可是从B页面返回后,A页面的视图花掉了,是怎么回事??下面给出详细的代码...

yuankai66
2012/11/22
2.9K
0
UIButton 圆角 边框颜色 字体大小 文字对齐 图片大小

UIButton UIButton 其实包含 UIImageView 和 UILabel 两个控件,UIButton继承于UIControl,所以有addtarget监听事件 1、类型: 2、位置 3、颜色、边框效果、边框颜色 4、图片 5、标题文字 大...

程序猿-樱木花道
2014/02/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

状态模式

//相当把一个State对象存到Context对象中,然后通过Context实例化对象调用保存的state对象去调用state的相应的方法 https://blog.csdn.net/syc434432458/article/details/51210361...

南桥北木
17分钟前
0
0
基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

本文首发于:Jenkins 中文社区 使用 JaCoCo 统计功能测试代码覆盖率? 对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当...

Jenkins中文社区
25分钟前
3
0
聊聊Elasticsearch的OsProbe

序 本文主要研究一下Elasticsearch的OsProbe OsProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/os/OsProbe.java public class OsProbe { private static f......

go4it
25分钟前
0
0
谈谈lucene的DocValues特性之NumericDocValuesField

在默认实现的DocValuesCosumer中,数值有可能分块存储也有可能放在一个数据块中存储。 分块的大小默认是16384,并且通过预先计算如果按一个块存储最大值与最小值的差所占用的比特数和分块存储...

FAT_mt
43分钟前
0
0
【BATJ】面试必问MySQL索引实现原理

BATJ面试题剖析 1、为什么需要使用索引? 2、数据结构Hash、平衡二叉树、B树、B+树区别? 3、机械硬盘、固态硬盘区别? 4、Myisam与Innodb B+树的区别? 5、MySQL中的索引什么数据结构? 6、...

须臾之余
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部