[英]Calling function when user taps anywhere on screen
您也可以应用此简单方法
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:)))
self.view.addGestureRecognizer(tapGesture)
func tapBlurButton(_ sender: UITapGestureRecognizer) {
if //checkmenuopen
{
closemenuhere
}
}
为此,当您显示小菜单时,在其下方添加一个不可见按钮(UIColor.clear),以整个屏幕为框架。 它的作用是解散您的菜单。
确保在关闭小菜单时也要关闭按钮。
希望这可以帮助!
基本上可以使用触摸开始功能
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("TAPPED SOMEWHERE ON VIEW")
}
针对您的情况有几种解决方案:
1-在ViewController中实现touchesBegan(_:with:)
方法:
告诉此对象在视图或窗口中发生了一个或多个新触摸。
简单来说,如下:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// do something
}
2-将UITapGestureRecognizer添加到ViewController的主视图中:
override func viewDidLoad() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(doSomething(_:)))
view.addGestureRecognizer(tapGesture)
}
func doSomething(_ sender: UITapGestureRecognizer) {
print("do something")
}
或者-当然-您可以在没有参数的情况下实现选择器:
override func viewDidLoad() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(doSomething))
view.addGestureRecognizer(tapGesture)
}
func doSomething() {
print("do something")
}
3-您也可以按照Mohammad Bashir Sidani的回答进行操作 。
我建议确保无论是通过编程方式还是通过情节提要添加适当的约束到您的按钮。
我不确定下面的代码是否适合您的情况,仅是一个建议。
class ViewController: UIViewController {
var closeMenuGesture: UITapGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
closeMenuGesture = UITapGestureRecognizer(target: self, action: #selector(closeMenu))
closeMenuGesture.delegate = self
// or closeMenuGesture.isEnable = false
}
@IBAction func openMenu() {
view.addGestureRecognizer(closeMenuGesture)
// or closeMenuGesture.isEnabled = true
}
@IBAction func closeMenu() {
view.removeGestureRecognizer(closeMenuGesture)
// or closeMenuGesture.isEnabled = false
}
}
extension ViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view === self.view // only valid outside menu UIView
}
}
而且我从来没有遇到过这种情况,因此不能确定启用/禁用closeMenuGesture是否足以确保其他控件正常工作,或者添加/删除closeMenuGesture是否更有保障。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.