如何在 Swift 3.0 中获取按钮的当前标题,ios 使用 sender.titleForState(.Normal)!

How to get the current Title of a button in Swift 3.0 , ios using sender.titleForState(.Normal)!

我试图在 swift 中获取 buttontitle,如下所示。

@IBAction func buttonAction(_ sender: Any) {
  let buttonTitle = sender.titleForState(.Normal)!
}

但它没有用,即使我们在发件人之后按 . 时它也没有给出任何 hint

so what is the correct way of doing this in swift 3.0

否则,如果我们创建一个 IBOutlet 然后我们使用它的 currentTitle,它会像下面这样正常工作。为什么我们不能用 sender. 得到上面的

@IBOutlet var thebutton: UIButton!

@IBAction func buttonAction(_ sender: Any) {
  let buttonTitle = thebutton.currentTitle!
  print(buttonTitle)
}

因为参数 sender 的类型是 Any 而不是 UIButton。将方法签名更改为:

@IBAction func buttonAction(_ sender: UIButton) {
  if let buttonTitle = sender.title(for: .normal) {
    print(buttonTitle)
  }
}

你应该可以开始了。

从 Swift 3.0 开始,它从

sender.titleForState(.正常)! >> sender.title(对于:.normal)!

Any更改为AnyObject

@IBAction func buttonPressed(_ sender: AnyObject) {
  let title = sender.title(for: .normal)!
  print("\(title) button pressed")
}

要在 swift 3.0 中获取按钮的标题而不考虑其当前状态,请尝试使用此方法:

    @IBAction func buttonPressed(_ sender:UIButton){
       let buttonTitle = sender.titleLabel?.text
       print("\(String(describing: buttonTitle)")
    }

这将 return 状态的标题,基于按钮当前所在的状态。

  @IBAction func btnNextTapped(_ sender: Any) {
    let title = (sender as AnyObject).title(for: .normal)!
  }

Swift4.0

@IBAction func buttonPressed(_ sender: AnyObject) {
  let title = sender.title(for: .normal)
  print("\(title) button pressed")
}

所以这是 swift 4.0,而不是最后一个。

如果您的按钮有一个常规标题,您可以使用:

button.title(for: state) // probably UIControl.State.normal

如果您的 UIButton 有一个属性标题,您需要使用:

self.attributedTitle(for: state)

或者您可以使用更通用的扩展名:

extension UIButton {
    func titleForState(_ state: UIControl.State = .normal) -> String? {
        if let title = self.title(for: state) {
            return title
        }

        if let attribTitle = self.attributedTitle(for: state) {
            return attribTitle.string
        }

        return nil
    }
}

使用 Swift 5.0 的最智能版本:

@IBAction func buttonAction(_ sender: UIButton) {
    print(sender.currentTitle)
}

为了解决警告,可以使用以下代码。

@IBAction func buttonAction(_ sender: UIButton) {
      let buttonTitle = sender.title(for: .normal) ?? String()
      print(buttonTitle)
    }

使用 Swift 版本 5.5.2,我发现打印标签标题的最佳方法是:

@IBAction func keyPressed(_ sender: UIButton) {
    print(sender.title(for: .normal)!)
}

我在使用 sender.title(for: .normal) 时收到警告。感叹号(!)解决了。