タグを使うと言ってくださった皆さんに感謝しますが、実際にはUIButtonクラスを拡張してそこにオブジェクトを追加するだけで十分です。
タグはこれを回避する絶望的な方法です。このようにUIButtonを拡張します(Swift 4で)
import UIKit
class PassableUIButton: UIButton{
var params: Dictionary<String, Any>
override init(frame: CGRect) {
self.params = [:]
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
self.params = [:]
super.init(coder: aDecoder)
}
}
その後、あなたの呼び出しは呼び出しになる可能性があります(コロン「:」に注意Selector(("webButtonTouched:"))
)
let webButton = PassableUIButton(frame: CGRect(x:310, y:40, width:40, height:40))
webButton.setTitle("Visit",for: .normal)
webButton.addTarget(self, action: #selector(YourViewController.webButtonTouched(_:)), for:.touchUpInside)
webButton.params["myvalue"] = "bob"
そして最後にすべてここでそれをキャッチ
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
これを1回行い、プロジェクト全体で使用します(子クラスに一般的な「オブジェクト」を持たせ、ボタンに好きなものを配置することもできます!)。または、上記の例を使用して、無数のキー/文字列パラメータをボタンに配置します。URL、確認メッセージの方法などを含める場合に非常に役立ちます。
余談ですが、SO
コミュニティがこれを理解していることは重要です。何も知らない/教えられていない/要点を逃した驚異的な数のプログラマによって、インターネット全体に悪い慣習がカットアンドペーストされているのです。の概念object extensions