答案 0 :(得分:3)
您也可以采用这种简单方法
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:)))
self.view.addGestureRecognizer(tapGesture)
func tapBlurButton(_ sender: UITapGestureRecognizer) {
if //checkmenuopen
{
closemenuhere
}
}
答案 1 :(得分:1)
为此,当您显示小菜单时,在其下方添加一个隐藏按钮(UIColor.clear),整个屏幕作为一个框架。它的行动是取消你的菜单。
确保当您关闭小菜单以解除此按钮时。
希望这有帮助!
答案 2 :(得分:0)
你可以使用基本接触开始功能
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("TAPPED SOMEWHERE ON VIEW")
}
答案 3 :(得分:0)
我不确定以下代码是否适用于您的情况,只是一个建议。
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更加保险。