我看到有很多这样的问题,我想我正在遵循公认的 Swift 3 方法,但我仍然一无所获。我可以看到 UITapGestureRecognizer 已附加。这是我的代码:
let tileClick = UITapGestureRecognizer(target: self, action: #selector(GameManagement.initiateTileClick(_:)))
newView.addGestureRecognizer(tileClick)
newView.isUserInteractionEnabled = true
func initiateTileClick(_ sender: UITapGestureRecognizer) {
print("initiate tile click")
}
一些注意事项:
1) 我附加手势识别器的 View 有两个 View 和一个标签,每个 View 覆盖整个 View 框架,但是,我尝试将识别器附加到标签,这是最上面的子项,它仍然不起作用。
2) 添加识别器的函数和点击时调用的函数都包含在一个 NSObject 文件中。我有各种相互关联的功能,我希望能够从多个 View Controller 调用这些功能,并且更愿意将其保存在单独的 NSObject 文件中。当我将所有内容都放在 UIViewController 文件中时,该过程有效;当我将函数移至 NSObject 文件时,该过程停止工作。
3) 我试过将 GameManagement.initiateTileClick
更改为 self.initiateTileClick
或只是 initiateTileClick
但这些都不起作用。
最佳答案
如果您将 View 放在 NSObject
子类中,那么这些 views
将失去它们对 UIResponder
的行为,它像我一样管理 UI 交互无法看到您如何将这些 View 添加到界面。
如您所说,它在 ViewController
内部工作,因为它管理 View 层次结构和响应者链。
解决方案是编写扩展
来分离代码或更好的抽象。
extension YourViewController {
newView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(GameManagement.initiateTileClick(_:))))
newView.isUserInteractionEnabled = true
func initiateTileClick(_ sender: UITapGestureRecognizer) {
print("initiate tile click")
}
}
关于ios - UITapGestureRecognizer 不工作 - Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43837359/