Apprezzo tutti coloro che dicono di usare i tag, ma in realtà è necessario estendere la classe UIButton e aggiungere semplicemente l'oggetto lì ..
I tag sono un modo senza speranza per aggirare questo. Estendi il pulsante UIB in questo modo (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)
}
}
allora la tua chiamata potrebbe essere chiamata (NOTA I due punti ":" 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"
poi finalmente prendi tutto qui
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
Puoi farlo una volta e usarlo durante il tuo progetto (puoi persino fare in modo che la classe figlia abbia un "oggetto" generico e mettere quello che vuoi nel pulsante!). Oppure usa l'esempio sopra per inserire un numero inesauribile di parametri chiave / stringa nel pulsante .. Veramente utile per includere cose come URL, conferma della metodologia dei messaggi ecc.
Per inciso, è importante che la SO
comunità si renda conto che c'è un'intera generazione di cattive pratiche tagliate e incollate su Internet da un numero allarmante di programmatori che non capiscono / non hanno imparato / hanno perso il punto di il concetto diobject extensions