iOS 中UIButton的 settitle 和 titlelabel的使用誤區

UIButton中設置Titl方法包括如下幾種:ui

- (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??atom

1.其實不是,正常使用UIButton的時候設置Title是要對應Button的ControlState,由於UIButton繼承於UIControl,在設置值得時候須要對象狀態,因此通常都會用spa

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

2.setAttributedTitle是iOS6以後的方法,使用起來很簡單,沒特點說明。實例以下:orm

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

 

3.對應的currentTitle 也就是/normal/highlighted/selected/disabled狀態下的title值,屬性爲readOnly;對象

4.至於titleLabel是設置的時候爲啥不顯示,比較神奇。查了官方文檔之後才發現,真正的緣由再於:(如下是我使用UIButton打印titleLabel對象的結果)blog

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個值就能夠正常顯示,ip

不管你採用何種方式生產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不會遇到那麼多麻煩。。。

相關文章
相關標籤/搜索