【问题标题】:Custom UI Button setTitle(_:for:) method not working自定义 UI 按钮 setTitle(_:for:) 方法不起作用
【发布时间】:2021-07-13 05:23:42
【问题描述】:

我有一个自定义 UI Button 子类,当我调用 setTitle(_:for:) 方法时,标题没有改变,按钮显示“Button”标题。我在awakeFromNib()中调用了这个方法。

这是我的自定义按钮代码

class DeleteButton: UIButton {

  override func awakeFromNib() {
    self.backgroundColor = .systemRed
    self.setTitleColor(.white, for: .normal)
    self.setTitle("Eliminar", for: .normal)
  }

  override func layoutSubviews() {
    self.layer.cornerRadius = self.frame.height/2
  }
}

调试我得到的代码:

所以我不明白为什么按钮不在 UI 中显示标题。 awakeFromNib() 有事吗?

【问题讨论】:

  • 你是如何初始化你的按钮的?不确定您的标签和按钮之间的关系。
  • @LeoDabus 通过情节提要。 self.titleLabel 是按钮标题标签。我不明白为什么 self.titleLabel.text 返回“按钮”但 self.title(for: .normal) 返回正确的标题。
  • 您还设置了另外两个东西 - backgroundColor 和 titleColor。由于您使用的是故事板,如果您在此处将此按钮设置为 systemBlue 会发生什么?它是蓝色的还是红色的? (消除事物的最简单方法。)
  • titleLabel.text 表示该标签文本的当前值是多少。但是 UIButtons 有状态,并且您为这些不同的状态配置标题,这意味着当按钮更改状态时,它会更改其自己标签中的文本。那还没有发生

标签: ios swift uibutton


【解决方案1】:

您可以在 init 函数中设置值,而不是在 awakeFromNib() 中设置值。比如你可以override init(frame: CGRect)

override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = .systemRed
        self.setTitleColor(.white, for: .normal)
        self.setTitle("Eliminar", for: .normal)
 }

【讨论】:

    【解决方案2】:

    将 Button 的子类更改为 DeleteButton

    【讨论】:

    • 欢迎您,@Danny_Chan!你愿意提供更多细节或解释你是如何得出这个答案的吗?我相信这对阅读您的帖子的人会很有用(:
    • 它已经被声明为我的按钮的子类,名为 DeleteButton。
    【解决方案3】:

    问题已解决。我错过了layoutSubviews()方法中的super.layoutSubviews()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2015-07-05
      • 2017-07-09
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多