swift UITapGestureRecognizer 无法在 View 上工作

标签 swift uitapgesturerecognizer

我必须创建一个新线程,因为它让我发疯,而且网上的所有其他答案都完全相同。我已经这样做过无数次了,但我看不出我一生中错过了什么。我正在使用“测试” View Controller 只是为了让点击手势正常工作,但它根本不起作用...我相当确定我设置正确,因为这就是我一直在中实现它的方式过去:(是的,我已经选中了 isUserInteractionEnabled 框)。我什至以这种方式在不同的 View Controller 上实现它并且它正在工作......

class TestViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    view.addGestureRecognizer(tap)
  }

  let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))

    
  @objc func wasTapped() {
    print("tapped")
  }
}

我还尝试将参数添加到 wasTapped:

@objc func wasTapped(gestureRecognizer: UITapGestureRecognizer) {
  print("tapped")
}

最佳答案

你是说:

override func viewDidLoad() {
    super.viewDidLoad()

    view.addGestureRecognizer(tap)
}

let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))

问题出在最后一行:

let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))

你不能只是在一个偏僻的地方说let tap。您正在隐式创建实例属性。但是您无法使用 self 目标来初始化实例属性,因为在初始化实例属性时 self 并不存在。 (我认为该代码甚至可以编译为错误,并已将其报告为错误。)

将该行移至 viewDidLoad 的开头,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
    view.addGestureRecognizer(tap)
}

关于swift UITapGestureRecognizer 无法在 View 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47297551/

相关文章:

ios - swift 太聪明?使用 XCTest 测试时检查对象类型

ios - 点击手势识别器 - 哪个对象被点击了?

ios - 如何检测对 UILabel 特定部分(子字符串)的点击?

SwiftUI 如何从另一个类访问 ContentView 变量

ios - 开始开发 iOS 应用程序 (Swift) - 添加按钮不再起作用

swift - SpriteKit : fade out SKNode - children shines through

ios - UITapGestureRecognizer识别主视图上的水龙头(不是输入或按钮)

ios - 采取一定数量的步骤后通知。 swift 2.0

ios - 检测手指向上/向下 UITapGestureRecognizer

iOS 点击识别器捕捉所有点击