我想制作一个UIButton,其类型为UIButtonTypeCustom(用于形状)。我想使用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方法-它应该可以工作。
我之前已经遇到过几次,并且一直都在解决它,但是我真的很想弄清楚。有任何想法吗?
最佳答案
像这样设置titleLabel
的text
属性无效。相反,请在按钮上调用-setTitle:forState:
:
[editButton setTitle:@"Edit" forState:UIControlStateNormal]
这样做的原因是因为按钮可以针对不同的状态使用不同的标题(例如
UIControlStateDisabled
,UIControlStateHighlighted
)。如果您未明确指定其他状态,则为UIControlStateNormal
控件状态设置属性将适用于所有状态。根据
UIButton
的文档:您可以根据状态自定义标签的颜色和阴影颜色。分别参见
-setTitleColor:forState
和-setTitleShadowColor:forState
。 titleLabel
上的其余属性(例如textAlignment
和font
)应立即设置,并应适用于所有控制状态。具体来说,请参见
UIButton
的titleLabel
属性的文档:https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabeltitleLabel
本身是只读的,但这并不意味着您不能更改其自身属性的值,例如字体,换行模式等。关于iphone - iOS:UIButton titleLabel-它有什么作用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4910446/