I'm pemrograman menambahkan UITapGestureRecognizer dengan salah satu dari pandangan saya:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(modelObj:myModelObj)))
self.imageView.addGestureRecognizer(gesture)
func handleTap(modelObj: Model) {
// Doing stuff with model object here
}
Masalah pertama yang saya temui adalah "Argumen '#selector' tidak merujuk ke '@Objc' metode, properti, atau initializer.
Keren, jadi saya menambahkan @objc ke handleTap tanda tangan:
@objc func handleTap(modelObj: Model) {
// Doing stuff with model object here
}
Sekarang saya'm mendapatkan kesalahan "Metode tidak dapat ditandai @objc karena jenis parameter tidak dapat diwakili dalam Objective-C.
It's hanya sebuah gambar peta dari sebuah bangunan, dengan beberapa pin gambar yang menunjukkan lokasi dari titik-titik yang menarik. Ketika pengguna menyentuh salah satu pin I'd ingin tahu yang point of interest mereka mengetuk, dan aku memiliki sebuah model objek yang menggambarkan titik-titik yang menarik. Saya menggunakan model ini objek untuk memberikan pin gambar itu's koordinat pada peta jadi saya pikir itu akan menjadi mudah bagi saya untuk hanya mengirim objek ke gerakan handler.
Sepertinya anda're kesalahpahaman beberapa hal.
Ketika menggunakan target/action, fungsi signature harus memiliki bentuk tertentu...
func doSomething(sender: Any)
atau
func doSomething(sender: Any, forEvent event: UIEvent)
mana...
pengirim
parameter kontrol objek mengirim pesan tindakan.
Dalam kasus anda, pengirim adalah UITapGestureRecognizer
Juga, #selector()
harus berisi func tanda tangan, dan TIDAK termasuk berlalu parameter. Jadi untuk...
func handleTap(sender: UIGestureRecognizer) {
}
anda harus memiliki...
let gesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
Dengan asumsi func dan gerakan yang hanya view controller, yang modelObj
adalah properti / ivar, ada's tidak perlu lulus dengan gerakan recogniser, anda hanya dapat merujuk ke dalam handleTap
Langkah 1: membuat objek kustom dari pengirim.
langkah 2: tambahkan properti anda ingin mengubah dalam a objek kustom pengirim
langkah 3: typecast pengirim dalam menerima berfungsi untuk a objek kustom dan mengakses properti
Untuk misalnya: pada klik tombol jika anda ingin mengirim string atau objek kustom lalu
langkah 1: membuat
class CustomButton : UIButton {
var name : String = ""
var customObject : Any? = nil
var customObject2 : Any? = nil
convenience init(name: String, object: Any) {
self.init()
self.name = name
self.customObject = object
}
}
langkah 2: mengatur kelas kustom dalam storyboard serta
langkah 2-b: Buat IBOutlet dari tombol itu dengan custom kelas sebagai berikut
@IBOutlet weak var btnFullRemote: CustomButton!
langkah 3: menambahkan properti yang ingin anda ubah dalam a objek kustom pengirim
btnFullRemote.name = "Nik"
btnFullRemote.customObject = customObject
btnFullRemote.customObject2 = customObject2
btnFullRemote.addTarget(self, action: #selector(self.btnFullRemote(_:)), for: .touchUpInside)
langkah 4: typecast pengirim dalam menerima berfungsi untuk a objek kustom dan mengakses properti
@objc public func btnFullRemote(_ sender: Any) {
var name : String = (sender as! CustomButton).name as? String
var customObject : customObject = (sender as! CustomButton).customObject as? customObject
var customObject2 : customObject2 = (sender as! CustomButton).customObject2 as? customObject2
}