繁体   English   中英

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

[英]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 . 在发件人之后。

那么在 swift 3.0 中执行此操作的正确方法是什么

或者,如果我们创建一个IBOutlet然后使用它的currentTitle ,它会像下面这样正常工作。 为什么我们无法通过sender. 以上

@IBOutlet var thebutton: UIButton!

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

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

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

你应该很高兴去。

要在 swift 3.0 中获取按钮的标题,而不管其当前状态如何,请尝试使用以下命令:

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

这将根据按钮当前所处的状态返回状态的标题。

使用 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 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")
}
@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.5.2 版,我发现打印标签标题的最佳方法是:

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

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

我使用了 switch 语句:

变种 buttonConter = 1
@IBAction func hardlessSelected(_ sender: UIButton) {

    switch buttonConter {
    case 1:
        buttonConter += 1
        print("Soft")
    case 2:
        buttonConter += 1
        print("Medium")
    case 3:
        buttonConter += 1
        print("Hard")
    default:
        print("Non")
    }

    
}

}

仅使用 currentTitle 的简单方法:

@IBAction func hardlessSelected(_ sender: UIButton) {

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

斯威夫特4.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM