我必须创建一个新线程,因为它让我发疯,而且网上的所有其他答案都完全相同。我已经这样做过无数次了,但我看不出我一生中错过了什么。我正在使用“测试” 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/