我正在以编程方式将UITapGestureRecognitor添加到我的一个视图中:

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
}

我遇到的第一个问题是"‘#selector’的参数没有引用‘@objc’方法、属性或初始值设定项.

很酷,所以我在handleTap签名中添加了@objc:

@objc func handleTap(modelObj: Model) {
  // Doing stuff with model object here
}

现在我得到的错误"方法不能标记为@objc,因为参数的类型不能在Objective-C中表示.

这只是一张建筑物 map 的图像,上面有一些大头针图像指示了兴趣点的位置.当用户点击其中一个管脚时,我想知道他们点击了哪个兴趣点,我有一个描述这些兴趣点的模型对象.我使用这个模型对象为图钉图像提供它在 map 上的坐标,所以我认为只需将该对象发送到手势处理程序对我来说会很容易.

推荐答案

看起来你误会了几件事.

当使用target/action时,函数签名必须具有某种形式的…

func doSomething()

func doSomething(sender: Any)

func doSomething(sender: Any, f或Event event: UIEvent)

…在哪里?

sender参数是发送动作消息的控制对象.

在您的情况下,发件人是UITapGestureRecognizer

Also, #select或() should contain the func signature, and does NOT include passed parameters. So f或…

func handleTap(sender: UIGestureRecognizer) {
    
}

你应该有…

let gesture = UITapGestureRecognizer(target: self, action: #select或(handleTap(sender:)))

假设函数和手势在视图控制器中,其中modelObj是一个属性/ivar,不需要通过手势识别器传递它,您可以在handleTap中引用它

Ios相关问答推荐

SwiftUI中的视频时间轴

更改文本在Flutter 中的位置

自定义油漆圆角三角形

快速相机放大手势不能正常工作

在相机动作之前快速防止场景视点重置

如何删除NavigationView中的默认透明标头?

Flutter iOS 键盘问题:. TextInputType.number 中缺少字符

Swift - 缺少函数参数在编译期间不会失败,甚至会导致不同的数据类型?

使用异步重载实现Swift协议一致性

在 SwiftUI 中使用 .rotation3DEffect 在视图之间翻转

在标签中显示多个计数器但在同一屏幕(Swift,IOS)

使用 @MainActor 更新 UI 的适当策略是什么?

无论我将构建版本或应用程序版本更改为什么,都会出现 ITEMS-4238冗余二进制上传错误

在 Xcode 4 中将静态库链接到 iOS 项目

如何使用 swift 添加速率按钮的链接?

应用程序不包含正确的测试版权利

如何用 CAShapeLayer 和 UIBezierPath 画一个光滑的圆?

UITextView 内容插图

在 UITableViewController 中使用 UISearchDisplayController 时断言失败

iOS 中的 Google Analytics SDK 3.0 _sqlite3 链接器错误