iOS:UIButton titleLabel - 它做了什么吗?

时间:2011-02-05 23:37:25

标签: iphone ios uibutton uilabel uifont

我想制作一个类型为UIButtonTypeCustom的UIButton(用于形状)。我想使用button.titleLabel分配标题,因为我需要指定字体。以下代码看起来应该可以工作,但不会 - 没有标签显示,句点。

UIImage *editButtonImage = [UIImage imageNamed: @"editButton.png"];
float width = editButtonImage.size.width;
float height = editButtonImage.size.height;

UIButton *editButton = [UIButton buttonWithType: UIButtonTypeCustom];
editButton.frame = CGRectMake(0, 0, width, height);
[editButton setBackgroundImage: editButtonImage forState: UIControlStateNormal];
editButton.adjustsImageWhenHighlighted = YES;
editButton.titleLabel.text = @"Edit";
editButton.titleLabel.textColor = [UIColor whiteColor];
editButton.titleLabel.textAlignment = UITextAlignmentCenter;
editButton.titleLabel.font = [UIFont fontWithName: @"Helvetica" size: 14];
[self.view addSubview: editButton];

每个人总是说使用setTitle:forState:但是这会给你一个我不喜欢的字体。不推荐使用titleLabel方法 - 它应该可以工作。

我之前已经遇到过这几次,并且总是只是解决它,但我真的很想弄明白。有什么想法吗?

2 个答案:

答案 0 :(得分:79)

像这样设置titleLabel的{​​{1}}属性无效。而是在按钮上调用text

-setTitle:forState:

这是因为按钮可以针对不同的状态具有不同的标题(例如,[editButton setTitle:@"Edit" forState:UIControlStateNormal] UIControlStateDisabled)。如果您未明确指定其他状态,则为UIControlStateHighlighted控件状态设置属性将适用于所有状态。

根据UIControlStateNormal的文档:

  

此类提供了设置按钮的标题,图像和其他外观属性的方法。通过使用这些访问器,您可以为每个按钮状态指定不同的外观。

您可以根据状态自定义标签的颜色和阴影颜色。分别参见UIButton-setTitleColor:forState-setTitleShadowColor:forState上的其他属性(例如titleLabeltextAlignment)应该可以正常运行,并且应该适用于所有控制状态。

具体而言,请参阅font的{​​{1}}媒体资源的文档:https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel

UIButton本身是只读的,但这并不意味着您无法更改其自身属性的值,例如字体,换行符模式等。

答案 1 :(得分:0)

这是我使用Swift 4.2进行计算的方式。

counterButton.setTitle("Start Counter",
                      for:UIControl.State.normal)