ฉันขอขอบคุณทุกคนที่บอกว่าใช้แท็ก แต่จริงๆแล้วคุณต้องขยายคลาส 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)
}
}
แล้วโทรของคุณอาจจะโทร (หมายเหตุลำไส้ใหญ่ ":" ใน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