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

如何使用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,它的工作原理如下所示。为什么我们无法通过发送方获得它。以上内容 @

我试图在swift中获取
按钮的
标题,如下所示

@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”的不可变表达式”