Aprecio que todos digan que use etiquetas, pero realmente necesita extender la clase UIButton y simplemente agregar el objeto allí ...
Las etiquetas son una forma desesperada de evitar esto. Extienda el UIButton así (en 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)
}
}
entonces su llamada puede ser llamada (NOTA LOS dos puntos ":" en 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"
luego, finalmente, cógelo todo aquí
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
Puede hacer esto una vez y usarlo en todo su proyecto (¡incluso puede hacer que la clase secundaria tenga un "objeto" genérico y poner lo que quiera en el botón!). O use el ejemplo anterior para poner una cantidad inagotable de parámetros de clave / cadena en el botón. Realmente útil para incluir cosas como URL, confirmar metodología de mensajes, etc.
Aparte, es importante que la SO
comunidad se dé cuenta de que hay toda una generación de malas prácticas que están siendo cortadas y pegadas en Internet por un número alarmante de programadores que no entienden / no se les ha enseñado / han perdido el punto de el concepto deobject extensions