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

Ama*_*mer 27 iphone uibutton uilabel uifont ios

我想制作一个类型为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];
Run Code Online (Sandbox Code Playgroud)

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

我之前已经遇到过好几次并且总是只是解决它,但我真的想弄明白.有任何想法吗?

CIF*_*ter 79

设置这样titleLabeltext属性没有任何效果.相反,请-setTitle:forState:按下按钮:

[editButton setTitle:@"Edit" forState:UIControlStateNormal]
Run Code Online (Sandbox Code Playgroud)

这是因为按钮可以针对不同的状态具有不同的标题(例如UIControlStateDisabled,UIControlStateHighlighted).UIControlStateNormal如果未明确指定其他状态,则为控件状态设置属性将应用于所有状态.

根据以下文档UIButton:

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

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

具体来说,请参阅该文档UIButtontitleLabel属性:https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel

titleLabel 本身是只读的,但这并不意味着你不能改变它自己的属性的值,如字体,换行模式等.

  • 起初有点违反直觉.看起来,设置标签的`text`属性只是调用`-setTitle:forState`的快捷方式,但事实并非如此. (4认同)
  • 同样,看起来你不能直接设置titleLabel的textColor属性,但必须使用setTitleColor:forState:方法.谢谢你提到这个,因为它不在文档中. (2认同)