J'apprécie que tout le monde dise utiliser des balises, mais vous devez vraiment étendre la classe UIButton et y ajouter simplement l'objet.
Les tags sont un moyen désespéré de contourner cela. Étendez l'UIButton comme ceci (dans 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)
}
}
alors votre appel peut être call (NOTEZ LES deux points ":" 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"
puis enfin attraper tout ici
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
Vous faites cela une fois et l'utilisez tout au long de votre projet (vous pouvez même faire en sorte que la classe enfant ait un "objet" générique et mettre ce que vous voulez dans le bouton!). Ou utilisez l'exemple ci-dessus pour mettre un nombre inépuisable de paramètres clé / chaîne dans le bouton. Vraiment utile pour inclure des choses comme des URL, confirmer la méthodologie de message, etc.
En passant, il est important que la SO
communauté se rende compte qu'il y a toute une génération de mauvaises pratiques coupées et collées sur Internet par un nombre alarmant de programmeurs qui ne comprennent pas / n'ont pas été enseignés / ont raté le but de le concept deobject extensions