iOS开发学习之 - 深入学习UIButton(1)

UIButton 是 iOS 中最最最常用的基础控件,可是今天做项目的时候我才发现,其实 UIButton 还有很多我所不知道的东西。不禁想起了那句老话,知识就像圆圈,你知道的越多,圆圈就越大,所接触到的未知也就越多。感觉真的是太对了,所以在此记录一下。


啥?你觉得自己很了解 UIButton?呵呵。。。


首先,刚创建的 button 肯定是白的,这点毋庸置疑,所以别忘记设置 button 的背景颜色(废话)。为了更清晰一些,我先把view的背景颜色设为了棕色(呵呵,我就是色盲,你咬我啊)。

然后我们来说说设置 title,看下面的代码,猜猜结果是什么样子的?

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 100, 200, 100);
btn.backgroundColor = [UIColor grayColor];
[btn setTitle:@"1234567" forState:UIControlStateNormal];
btn.titleLabel.text = @"abcdefg";


如图所示,title 是1234567,而不是abcdefg,这是为什么呢?



我们按住 command 后点击 titleLabel 进入内部看看



原来 titleLabel 是 readonly,是只读的。所以不能通过 btn.titleLabel.text = @"abcdefg"; 这种方式直接赋值(是这个原因吗?)。注意还有个 imageView 也是 readonly 的,先记着,一会再说它。


我们继续来说 titleLabel,观察下面的代码,猜猜结果是什么?

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 100, 200, 100);
btn.backgroundColor = [UIColor grayColor];
[btn setTitle:@"1234567" forState:UIControlStateNormal];
btn.titleLabel.text = @"abcdefg";
btn.titleLabel.font = [UIFont systemFontOfSize:40];
btn.titleLabel.textColor = [UIColor blueColor];

如图所示,发现字体确实变大了,但是颜色却没有改变,这又是为什么呢?


颜色没有变可能比较好理解,毕竟刚才说了 titleLabel 是只读的,那为什么字体变了呢???既然 titleLabel 是一个只读的UILabel,那么我们就再进入 UILabel 的内部定义去看看。



如图所示,font 是 resettable,可是 textColor 也是 resettable 啊,为什么一个可以另一个却不可以呢?

在讨论这个问题之前,我们先来看看正确设置文字颜色的方法(注意要设置state):

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

此时的效果如下图所示:



我知道这种方式可以,但我现在只想知道上面那种方法为什么不可以。来看一下  stackoverflow 上的讨论:



提问的人说他用 btn.titleLabel.textColor = XXX 的方法设置颜色的时候,有的时候好使,有的时候不好使(惊,我每次都不好使,人品不好么。。。)

有个人回答说,苹果官方文档是这么写的:"Do not use the label object to set the text color or the shadow color. Instead, use the setTitleColor:forState: and setTitleShadowColor:forState: methods of this class to make those changes."

官方文档只是说不要用 btn.titleLabel.textColor = XXX 的方法而要用 setTitleColor:forState: 方法,但是却没有解释原因。


我问了下师父,他说是因为即使你修改了 titleLabel 的 textColor,button 也会重新改掉它,因为 button 需要设置不同状态下的颜色,比如正常时的颜色、高亮时的颜色,所以不能这样简单地去设置颜色而需要加上状态。

那么 titleLabel.text 应该也是这样的原因吧?


有点小混乱了吧,还敢说自己很了解 UIButton 吗?先写这些,未完待续(这篇只是开胃菜,还有很多需要注意的地方哦)


第二篇入口:传送门

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值