2013-05-20 96 views
28

我看到了一堆类似的问题,但没有人得到我正在寻找的答案。当我使用这段代码创建一个UIButton并将其设置为titleLabel时,会出现UIButton,但titleLabel不会出现。UIButton titleLabel没有显示

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; 
[button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal]; 
button.titleLabel.text = @"Title"; 
button.titleLabel.font = [UIFont fontWithName:@"System-Bold" size:25.0f]; 
[self.view addSubview:button]; 

此代码显示按钮,但不是titleView,它的标题。为什么会这样?我正在开发iOS 6和更高版本。

注1:我不是在寻找这样一个选项:

[button setTitle:@"Title" forState:UIControlStateNormal]; 

因为我必须使用titleLabel来设置它的字体和中文字体。

注意2:我无法创建UILabel并将其作为子按钮添加。由于该按钮后来有动画效果。

回答

66

更新按钮标题时,您总是需要指定ControlState! 有用于UIButtons四个可能的值:

UIControlStateNormal 
UIControlStateHighlighted 
UIControlStateDisabled 
UIControlStateSelected 

因此,例如:

[button setTitle:@"Title" forState:UIControlStateNormal]; 

,然后你可以设置自定义设置titleLabel:

[button.titleLabel setFont:[UIFont fontWithName:@"Zapfino" size:20.0]]; 
[button.titleLabel setTextColor:[UIColor blueColor]]; 
+3

您应该使用'setTitleColor:forState'来设置颜色(而不是在'titleLabel'上调用'setTextColor')。 – hverlind

8
[button setTitle:@"Title" forState:UIControlStateNormal]; 

是设置标题字符串的正确方法。

titleLabel用于设置字体和颜色。

+0

注1:我不是在寻找这个答案。我不能用这个字体! – Peter

+1

titleLabel用于设置由setTitle设置的字符串的字体和颜色:forState: –

+0

非常感谢,我一直在寻找这么久:D –

2

尝试使用...

[button setNeedsLayout]; 
[button layoutIfNeeded]; 

它将强制按钮更新布局。