Doceniam wszystkich, którzy mówią używaj tagów, ale tak naprawdę musisz rozszerzyć klasę UIButton i po prostu dodać tam obiekt.
Tagi są beznadziejnym sposobem obejścia tego. Rozszerz UIButton w ten sposób (w 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)
}
}
wtedy może to być połączenie (UWAGA dwukropek „:” w 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"
w końcu złap to wszystko tutaj
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
Robisz to raz i używasz go w całym projekcie (możesz nawet sprawić, by klasa podrzędna miała ogólny „obiekt” i wstawić cokolwiek chcesz do przycisku!). Lub skorzystaj z powyższego przykładu, aby umieścić niewyczerpaną liczbę parametrów klucza / ciągu znaków w przycisku. Naprawdę przydatne do uwzględniania takich rzeczy, jak adresy URL, metodologia potwierdzania wiadomości itp.
SO
Nawiasem mówiąc, ważne jest, aby społeczność zdała sobie z tego sprawę, że przez alarmującą liczbę programistów, którzy nie rozumieją / nie zostali nauczeni / przegapili sens pojęcieobject extensions