如何获取 Swift 3.0 中按钮的当前标题,ios 使用 sender.titleForState(.Normal)!
Posted
技术标签:
【中文标题】如何获取 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)! 【发布时间】:2016-10-16 18:16:23 【问题描述】:我试图像下面这样快速获取button
的title
。
@IBAction func buttonAction(_ sender: Any)
let buttonTitle = sender.titleForState(.Normal)!
但它不起作用,即使当我们在发件人之后按.
时它也没有给出任何hint
。
那么在 swift 3.0 中这样做的正确方法是什么
或者,如果我们创建一个IBOutlet
,然后我们使用它的currentTitle
,它就可以正常工作,如下所示。为什么我们不能用sender.
得到它
@IBOutlet var thebutton: UIButton!
@IBAction func buttonAction(_ sender: Any)
let buttonTitle = thebutton.currentTitle!
print(buttonTitle)
【问题讨论】:
将发件人更改为UIButton
。
【参考方案1】:
因为参数 sender 的类型是 Any
而不是 UIButton
。将方法签名更改为:
@IBAction func buttonAction(_ sender: UIButton)
if let buttonTitle = sender.title(for: .normal)
print(buttonTitle)
你应该很高兴。
【讨论】:
是的,这行得通,但你必须像下面let buttonTitle = sender.title(for: .normal)!
一样打开它。谢谢你的帮助。
只是想知道我在问,为什么我们要检查按钮标题是否有值(对于 nil),我们知道它有一个值,所以我们可以简单地unwrap
而不是检查@987654326 @.
是的,如果你确定它不为零,那么使用!
而不是if let
子句。我个人尽可能避免使用!
,因为它会使您的代码容易受到意外异常的影响,例如解开 nil 可选项引起的异常。
提前感谢 :)
这是有效的,但如果在此期间您以编程方式更改了按钮的标题,您将获得原始标题而不是当前标题。要恢复当前标题,您应该这样做:让 buttonActualTitle = myButton.titleLabel?.text【参考方案2】:
要在 swift 3.0 中获取按钮的标题,无论其当前状态如何,请尝试使用以下方法:
@IBAction func buttonPressed(_ sender:UIButton)
let buttonTitle = sender.titleLabel?.text
print("\(String(describing: buttonTitle)")
这将根据按钮当前所处的状态返回状态标题。
【讨论】:
【参考方案3】:使用 Swift 5.0 的最智能版本:
@IBAction func buttonAction(_ sender: UIButton)
print(sender.currentTitle)
【讨论】:
这里我得到“无法分配给'@lvalue String??'类型的不可变表达式”【参考方案4】:为了解决警告,可以使用以下代码。
@IBAction func buttonAction(_ sender: UIButton)
let buttonTitle = sender.title(for: .normal) ?? String()
print(buttonTitle)
【讨论】:
【参考方案5】:@IBAction func buttonPressed(_ sender: AnyObject)
let title = sender.title(for: .normal)
print("\(title) button pressed")
所以这是 swift 4.0,而不是最后一个。
【讨论】:
【参考方案6】:如果您的按钮有一个常规标题,您可以使用:
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
【讨论】:
【参考方案7】:使用 Swift 5.5.2 版,我发现打印标签标题的最佳方法是:
@IBAction func keyPressed(_ sender: UIButton)
print(sender.title(for: .normal)!)
我在使用 sender.title(for: .normal)
时收到警告。感叹号(!)解决了它。
【讨论】:
【参考方案8】:从 Swift 3.0 开始,它从
sender.titleForState(.Normal)! >> sender.title(for : .normal)!
将 Any 更改为 AnyObject。
@IBAction func buttonPressed(_ sender: AnyObject)
let title = sender.title(for: .normal)!
print("\(title) button pressed")
【讨论】:
AnyObject 没有方法title(for:)
。【参考方案9】:
@IBAction func btnNextTapped(_ sender: Any)
let title = (sender as AnyObject).title(for: .normal)!
Swift4.0
【讨论】:
以上是关于如何获取 Swift 3.0 中按钮的当前标题,ios 使用 sender.titleForState(.Normal)!的主要内容,如果未能解决你的问题,请参考以下文章
iOS / Swift 3.0:如何确定 UITableView 中当前可见的行?
如何在 Phonegap 3.0 的 InnApp 浏览器中获取当前 url