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