web-dev-qa-db-ja.com

Swift 3.0、sender.titleForState(.Normal)を使用したiOSでボタンの現在のタイトルを取得する方法!

Swift以下のように、titlebuttonを取得しようとしました。

@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)
}
7
Chanaka Caldera

パラメータsenderAnyではなくUIButton型であるためです。メソッドシグネチャを次のように変更します。

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

そして、あなたは行ってもいいはずです。

24
ozgur

Swift 3.0の現在の状態に関係なくボタンのタイトルを取得するには、これを使用してみます:

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

これは、ボタンの現在の状態に基づいて、状態のタイトルを返します。

2
ZaneMan

警告を解決するために、次のコードを使用できます。

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

ボタンに通常のタイトルが付いている場合は、次を使用できます。

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
    }
}
0
DoesData

Swift 3.0なので、

sender.titleForState(.Normal)! >> sender.title(for:.normal)!

AnyAnyObjectに変更します。

@IBAction func buttonPressed(_ sender: AnyObject) {
  let title = sender.title(for: .normal)!
  print("\(title) button pressed")
}
0
Brian Oh

Swift 5.0を使用した最もスマートなバージョン:

@IBAction func buttonAction(_ sender: UIButton) {
    print(sender.currentTitle)
}
@IBAction func buttonPressed(_ sender: AnyObject) {
  let title = sender.title(for: .normal)
  print("\(title) button pressed")
}

つまり、これはSwift 4.0の場合であり、最後のものではありません。

0
Justie