有一个简单的UIViewController
,有两个按钮,每次按下按钮时,全屏 View 都会添加到viewcontorller
的 View 中,作为其大小与 View Controller
相同。
我们知道,如果一个 View 与其父 View 重叠,则父 View 无法响应任何事件。
但是,如果我按下 button0
,然后非常快地按下 button1
, View 就会添加到 viewcontorller
和第二个按钮的触摸事件中也被诱发。
这是我的代码:
@IBAction func button0Pressed(_ sender: Any) {
print(#function)
let view0 = UIView(frame: view.bounds)
view0.backgroundColor = UIColor.gray
let tap0 = UITapGestureRecognizer(target: self, action: #selector(tap0(_:)))
view0.addGestureRecognizer(tap0)
view.addSubview(view0)
}
@objc func tap0(_ gestureRecognizer: UITapGestureRecognizer) {
print(#function)
let view = gestureRecognizer.view
view?.removeFromSuperview()
}
@IBAction func button1Pressed(_ sender: Any) {
print(#function)
let view1 = UIView(frame: view.bounds)
view1.backgroundColor = UIColor.lightGray
let tap1 = UITapGestureRecognizer(target: self, action: #selector(tap1(_:)))
view1.addGestureRecognizer(tap1)
view.addSubview(view1)
}
@objc func tap1(_ gestureRecognizer: UITapGestureRecognizer) {
print(#function)
let view = gestureRecognizer.view
view?.removeFromSuperview()
}
输出:
button0按下
按钮1按下
那么,如何防止按下 button0
后 viewcontroller
的快速触摸事件?
最佳答案
您可以尝试将两个按钮(button0和button1)作为IBOutlet
并分配touchUpInside
事件来触发button0Press/button1Press函数。然后,您可能会启用
button1在x秒
(在我的示例中为1秒)按下button0。反之亦然。
@IBOutlet weak var button0: UIButton!
@IBOutlet weak var button1: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button0.addTarget(self, action: #selector(button0Pressed), for: .touchUpInside)
button1.addTarget(self, action: #selector(button1Pressed), for: .touchUpInside)
}
@objc func button0Pressed() {
print(#function)
let view0 = UIView(frame: view.bounds)
view0.backgroundColor = UIColor.gray
let tap0 = UITapGestureRecognizer(target: self, action: #selector(tap0(_:)))
view0.addGestureRecognizer(tap0)
view.addSubview(view0)
// Enable button1 after 1 second
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(1000)) {
self.button1.isEnabled = true
}
}
@objc func button1Pressed() {
print(#function)
let view1 = UIView(frame: view.bounds)
view1.backgroundColor = UIColor.lightGray
let tap1 = UITapGestureRecognizer(target: self, action: #selector(tap1(_:)))
view1.addGestureRecognizer(tap1)
view.addSubview(view1)
// Enable button0 after 1 second
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(1000)) {
self.button0.isEnabled = true
}
}
关于ios - 即使添加了 View ,UIViewContorller 的触摸事件仍然会收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55217356/