gpt4 book ai didi

ios - 即使添加了 View ,UIViewContorller 的触摸事件仍然会收到

转载 作者:行者123 更新时间:2023-11-29 05:55:27 26 4
gpt4 key购买 nike

有一个简单的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按下

那么,如何防止按下 button0viewcontroller 的快速触摸事件?

最佳答案

您可以尝试将两个按钮(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com