Я ценю всех, кто говорит об использовании тегов, но на самом деле вам нужно расширить класс UIButton и просто добавить туда объект.
Теги - безнадежный способ обойти это. Расширьте UIButton следующим образом (в 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)
}
}
тогда ваш звонок может быть call (ЗАПОМНИТЕ Двоеточие ":" в 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"
тогда, наконец, поймай все это здесь
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
Вы делаете это один раз и используете в своем проекте (вы даже можете сделать дочерний класс общим «объектом» и поместить все, что хотите, в кнопку!). Или используйте приведенный выше пример, чтобы поместить в кнопку неисчерпаемое количество параметров ключа / строки. Действительно полезно для включения таких вещей, как URL-адреса, методика подтверждения сообщений и т. Д.
Кроме того, важно, чтобы SO
сообщество осознало, что существует целое поколение плохой практики, которую вырезают в Интернете тревожным числом программистов, которые не понимают / не учили / не понимают сути Концепция чего-либоobject extensions