如何使用sender.titleForState(.Normal)获取Swift 3.0 ios中按钮的当前标题!
我试图在swift中获取如何使用sender.titleForState(.Normal)获取Swift 3.0 ios中按钮的当前标题!,ios,uibutton,swift3,title,Ios,Uibutton,Swift3,Title,我试图在swift中获取按钮的标题,如下所示 @IBAction func buttonAction(_ sender: Any) { let buttonTitle = sender.titleForState(.Normal)! } 但它不起作用,甚至当我们在发送者之后按时,它也不会给出任何提示 那么,在swift 3.0中,正确的做法是什么 或者,如果我们创建一个IBOutlet,然后使用它的currentTitle,它的工作原理如下所示。为什么我们无法通过发送方获得它。以上内容 @
按钮的标题,如下所示
@IBAction func buttonAction(_ sender: Any) {
let buttonTitle = sender.titleForState(.Normal)!
}
但它不起作用,甚至当我们在发送者之后按
时,它也不会给出任何提示
那么,在swift 3.0中,正确的做法是什么
或者,如果我们创建一个IBOutlet
,然后使用它的currentTitle
,它的工作原理如下所示。为什么我们无法通过发送方获得它。
以上内容
@IBOutlet var thebutton: UIButton!
@IBAction func buttonAction(_ sender: Any) {
let buttonTitle = thebutton.currentTitle!
print(buttonTitle)
}
因为参数发送器的类型为Any
,而不是ui按钮
。将方法签名更改为:
@IBAction func buttonAction(_ sender: UIButton) {
if let buttonTitle = sender.title(for: .normal) {
print(buttonTitle)
}
}
你应该准备好出发了。自从Swift 3.0以来,它从
发件人.标题或状态(.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)")
}
这将根据按钮当前所在的状态返回状态的标题
@IBAction func btnNextTapped(_ sender: Any) {
let title = (sender as AnyObject).title(for: .normal)!
}
迅捷4.0
@IBAction func buttonPressed(_ sender: AnyObject) {
let title = sender.title(for: .normal)
print("\(title) button pressed")
}
因此,这是针对swift 4.0的,不是最后一个。如果您的按钮有常规标题,您可以使用:
button.title(for:state)//可能是UIControl.state.normal
如果您的ui按钮
具有属性标题,则需要使用:
self.attributeTitle(用于:状态)
或者您可以使用更通用的扩展:
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)
}
将发件人更改为UIButton
。是的,这是可行的,但您必须像下面那样将其展开let buttontile=sender.title(用于:。正常)代码>。thanx寻求帮助。我只是想知道,为什么我们要检查按钮标题是否有值(对于nil),我们知道它有值,所以我们可以简单地展开,而不是检查nil
。是的,如果您确定它不是nil,那么使用代码>而不是if let
子句。我个人避免使用
尽可能使您的代码容易受到意外异常的影响,如提前展开nil optional.thanx所导致的异常:)这是可行的,但如果同时以编程方式更改了按钮的标题,则会得到原始标题,而不是当前标题。要恢复当前标题,您应该执行以下操作:let buttonActualTile=myButton.titleLabel?.text我得到的是“无法分配给类型为“@lvalue String”的不可变表达式”