Ich schätze jeden, der sagt, Tags verwenden, aber wirklich müssen Sie die UIButton-Klasse erweitern und einfach das Objekt dort hinzufügen.
Tags sind ein hoffnungsloser Weg, um dies zu umgehen. Erweitern Sie den UIButton wie folgt (in 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)
}
}
dann kann Ihr Anruf ein Anruf sein (HINWEIS DER Doppelpunkt ":" in 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"
dann endlich alles hier fangen
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
Sie tun dies einmal und verwenden es während Ihres gesamten Projekts (Sie können sogar dafür sorgen, dass die untergeordnete Klasse ein generisches "Objekt" hat und alles, was Sie möchten, in die Schaltfläche einfügt!). Oder verwenden Sie das obige Beispiel, um eine unerschöpfliche Anzahl von Schlüssel- / Zeichenfolgenparametern in die Schaltfläche einzufügen. Wirklich nützlich, um Dinge wie URLs einzuschließen, die Nachrichtenmethode zu bestätigen usw.
Abgesehen davon ist es wichtig, dass die SO
Community erkennt, dass eine ganze Generation von schlechten Praktiken im Internet von einer alarmierenden Anzahl von Programmierern abgeschnitten und eingefügt wird, die den Punkt nicht verstehen / nicht unterrichtet / verpasst haben das Konzept vonobject extensions