在 Swift 中将静态方法设置为 UITapGestureRecognizer 的操作

uma*_*151 5 ios swift

我正在以UIView编程方式在静态方法中创建一个,并希望添加UITapGestureRecognizer它将在我的Helper类中调用另一个静态方法。

Helper.swift

static func showLoadingPopUp(frame: CGRect) -> UIView {
  let transView = UIView.init(frame: frame!)       
  let tapGesture = UITapGestureRecognizer(target: self, action: "transViewTapped:")
  transView.addGestureRecognizer(tapGesture)
  return transView
}

static func transViewTapped(gesture: UITapGestureRecognizer) {
  print("Oh Tapped!!!")
}
Run Code Online (Sandbox Code Playgroud)

但它最终得到以下消息,可能是因为我的方法的静态性质。也是Helper.swift简单的 swift 类(不是UIViewUIViewController

错误:

无法识别的选择器 +[JaClassified.Helper transViewTapped:]

Che*_*Hsu 3

如果您的类不是 的后代NSObject,您可能需要将 桥接到static funcObjective-C (因为旧式 Objective-C 选择器适用于NSObjects)。

因此,就您而言,您可以将您的Helper班级声明为

class Helper: NSObject {
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以transViewTapped:通过在其前面加上前缀来将您的程序桥接至 Objective-C@objc

@objc static func transViewTapped(gesture: UITapGestureRecognizer) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。

  • 这对我来说不起作用——我仍然收到“无法识别的选择器”错误。我正在向通知中心注册选择器,如下所示:NotificationCenter.default.addObserver(LocationTracker.instance,选择器:#selector(orient),名称:Notification.Name.UIDeviceOrientationDidChange,对象:nil)。orient() 是一个静态方法。LocationTracker继承自NSObject。我做错了什么吗? (2认同)