【问题标题】:iOS: UIButton titleLabel -- does it do anything at all?iOS:UIButton titleLabel——它有什么作用吗?
【发布时间】:2011-06-22 01:54:42
【问题描述】:

我想制作一个 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 方法没有被弃用——它应该可以工作。

我之前遇到过几次,并且总是解决它,但我真的很想弄清楚。有什么想法吗?

【问题讨论】:

    标签: iphone ios uibutton uilabel uifont


    【解决方案1】:

    像这样设置titleLabeltext 属性无效。相反,请在按钮上调用-setTitle:forState:

    [editButton setTitle:@"Edit" forState:UIControlStateNormal]
    

    这是因为按钮在不同的状态下可以有不同的标题(例如,UIControlStateDisabledUIControlStateHighlighted)。如果您没有明确指定其他状态,则为UIControlStateNormal 控件状态设置属性将应用于所有状态。

    根据UIButton 的文档:

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

    您可以根据状态自定义标签的颜色和阴影颜色。分别参见-setTitleColor:forState-setTitleShadowColor:forStatetitleLabel 上的其余属性,例如 textAlignmentfont,应该可以按照您现在设置的方式工作,并且应该适用于所有控件状态。

    具体请参见UIButtontitleLabel 属性的文档:https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel

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

    【讨论】:

    • 所以你不能使用 titleLabel 设置的一件事是实际的文本值。这对我来说似乎有点奇怪,但没关系。
    • 一开始有点违反直觉。看起来,设置标签的text 属性只是调用-setTitle:forState 的快捷方式,但事实并非如此。
    • 类似地,你不能直接设置titleLabel的textColor属性,而必须使用setTitleColor:forState:方法。感谢您提及这一点,因为它不在文档中。
    • titleLabel.textAlignment 不正确。要对齐文本,您必须使用 titleLabel.contentHorizontalAlignment = .Left
    【解决方案2】:

    这是我使用 Swift 4.2 的方法。

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

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 2016-04-29
      • 2017-03-02
      • 2012-10-04
      • 1970-01-01
      相关资源
      最近更新 更多