如何在 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 中获取 button
的 title
,如下所示。
@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)
时收到警告。感叹号(!)解决了。
我试图在 swift 中获取 button
的 title
,如下所示。
@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)
时收到警告。感叹号(!)解决了。