Tôi đánh giá cao mọi người nói rằng sử dụng thẻ, nhưng thực sự bạn cần phải mở rộng lớp UIButton và chỉ cần thêm đối tượng vào đó ..
Thẻ là một cách vô vọng để giải quyết vấn đề này. Mở rộng UIButton như thế này (trong 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)
}
}
thì cuộc gọi của bạn có thể là cuộc gọi (LƯU Ý dấu hai chấm ":" 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"
rồi cuối cùng nắm bắt tất cả ở đây
@IBAction func webButtonTouched(_ sender: PassableUIButton) {
print(sender.params["myvalue"] ?? "")
}
Bạn làm điều này một lần và sử dụng nó trong suốt dự án của mình (bạn thậm chí có thể làm cho lớp con có một "đối tượng" chung và đặt bất cứ thứ gì bạn thích vào nút!). Hoặc sử dụng ví dụ trên để đặt một số lượng vô tận các tham số khóa / chuỗi vào nút. Thực sự hữu ích để bao gồm những thứ như url, phương pháp xác nhận thông báo, v.v.
Ngoài ra, điều quan trọng là SO
cộng đồng phải nhận ra rằng có cả một thế hệ hành vi xấu đang bị cắt giảm thị hiếu trên internet bởi một số lượng đáng báo động các lập trình viên không hiểu / chưa được dạy / bỏ sót điểm khái niệm củaobject extensions