iOS 中UIButton的 settitle 和 titlelabel的使用误区

UIButton中设置Titl方法包括以下几种:


- (void)setTitle:(NSString *)title forState:(UIControlState)state;

- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state

@property(nonatomic,readonly,retain) NSString *currentTitle;

@property(nonatomic,readonly,retain) UILabel *titleLabel;

在定义UIButton的时候,经常会使用titleLabel.text设置UIButton的值,但是Run出来确啥都没显示,不起作用啊!!!,这是怎么会事?难道是API的bug??

1.其实不是,正常使用UIButton的时候设置Title是要对应Button的ControlState,因为UIButton继承于UIControl,在设置值得时候需要对象状态,所以一般都会用

setTitle:(NSString *)title forState:(UIControlState)state 设置 Title;

2.setAttributedTitle是iOS6之后的方法,使用起来很简单,没特色说明。实例如下:

 [uibutton setAttributedTitle:[[NSAttributedString alloc]initWithString:@"3333333"] forState:UIControlStateNormal];

3.对应的currentTitle
也就是/normal/highlighted/selected/disabled状态下的title值,属性为readOnly;

4.至于titleLabel是设置的时候为啥不显示,比较神奇。查了官方文档以后才发现,真正的原因再于:(以下是我使用UIButton打印titleLabel对象的结果)

po uibutton.titleLabel

<UIButtonLabel: 0x7575800; frame = (0 0; 0 0); text = ‘11111111‘; clipsToBounds = YES; hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7572980>>

看到这里你明白了吗?

默认UIButton的titleLable是没设置frame的,而且hidden=YES;只要你设置这2个值就可以正常显示,

无论你采用何种方式生产UIButton:

 UIButton *uibtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 100, 100, 30)];

否者

UIButton *uibtn = [UIButton buttonWithType:UIButtonTypeCustom];

[uibtn setFrame:CGRectMake(0, 100, 100, 30)];

都一样;

总之,上面是我遇到过2次使用titleLabel不显示的总结,希望对以后有帮助。推荐使用第一种方式设置title不会遇到那么多麻烦。。。

iOS 中UIButton的 settitle 和 titlelabel的使用误区,布布扣,bubuko.com

时间: 2024-12-26 12:41:29

iOS 中UIButton的 settitle 和 titlelabel的使用误区的相关文章

iOS学习-UIButton的imageView和titleLabel

UIButton的imageView和titleLabel的位置设置通过setImageEdgeInsets和setTitleEdgeInsets来设置 参考:http://blog.csdn.net/dfqin/article/details/37813591及http://blog.sina.com.cn/s/blog_5df876f301016h8h.html 实现如上图的效果其实有多种方法,像在button上嵌套label,imageView即可,下面是通过调节button自带的titl

iOS中UIButton的titleEdgeInsets和imageEdgeInsets

默认状态下,UIButton的imageView和titleLabel之间没有间距,而且两个作为整体,居中显示. 设置button的titleEdgeInsets和imageEdgeInsets不是根据按钮的上下左右边距,而是根据titleLabel和imageView的当前位置决定的, 但是在测试的过程中又发现问题,比如 CGFloat topMargin = 50;self.btnTest.imageEdgeInsets = UIEdgeInsetsMake(topMargin, 0, 0,

iOS中UIButton控件的用法及部分参数解释

在UI控件中UIButton是极其常用的一类控件,它的类对象创建与大多数UI控件使用实例方法init创建不同,通常使用类方法创建: + (id)buttonWithType:(UIButtonType)buttonType; 如果使用实例方法创建UIButton对象,如: UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 50)]; 对象的创建是没有任何问题的,但是当为这个button对象设置一

ios中UIButton选中状态切换

关于UIButton的事件枚举有许多,平时用的少所以很多的都不是很清楚,今天了解了下,看了以前的代码,觉得在UIButton选中时操作写了许多冗余代码,而忽略了UIButton一个很重要的属性,如下: [objc] view plain copy print? typedef NS_OPTIONS(NSUInteger, UIControlState) { UIControlStateNormal       = 0, UIControlStateHighlighted  = 1 << 0, 

IOS中UIButton的背景图像无法正常显示的原因

主要是在将图像引入项目中,没有选择Destination:Copy items if needed一项. 没有选择Destination:Copy items if needed一项,图像只能是以链接的形式存在于项目中,当图像移动路径时,项目中的图像就无法正常显示. 所以,以后只要把其他资源引进项目中,都要勾选这一项,即将资源复制一份放进项目中,而不是以链接的形式存在于项目中.

IOS中UIButton和UIImageView的区别

1.使用场合 UIImageView:如果仅仅是为了显示图片,不需要监听图片的点击事件 UIButton:既要显示图片,又要监听图片等点击事件 2.相同点 都能显示图片 3.不同点 UIButton能处理点击事件,UIImageView不能处理点击事件 UIButton既能显示图片,又能显示文字 UIButton能同时显示两张图片,可以在Image和Background属性里面设置图片 UIButton继承自UIControl,因此默认就能处理事件 UIImageView继承自UIView,因此

ios开发中UIButton的使用(一)

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

iOS中 流媒体播放和下载 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 iOS中关于流媒体的简介:介于下载本地播放与实时流媒体之间的一种播放形式,下载本地播放必须全部将文件下载完成后才能播放,而渐进式下载不必等到全部下载完成后再播放,它可以一边下载一边播放,在完成播放内容之后,整个文件会保存在手机上. 实时流媒体 实时流媒体是一边接收数据包一边播放,本地不保留文件副本,实时流式传输总是实时传送,可以实时实况转播,支持随机访问,用户可以快进或者快退以观看前面或后面的内容.实时流媒体传输

ios中addtarget

Target-action:目标-动作模式,它贯穿于iOS开发始终.但是对于初学者来说,还是被这种模式搞得一头雾水. 其实Target-action模式很简单,就是当某个事件发生时,调用那个对象中的那个方法.如:按下按钮时,调用Controller里边的click方法.“那个对象”就是Target,“那个方法”就是Action,及Controller是Targer,click方法是action. 一般Target都是Controller,而Action有它自己固有的格式:-(IBAction)c