用户点击屏幕上的任意位置时调用功能

时间:2017-08-11 07:44:08

标签: ios iphone swift uiview

在我的应用程序中,我有一个小菜单,基本上是一个带有两个按钮的UIView。当用户点击按钮时菜单打开,当用户点击相同按钮时菜单也关闭。当用户点击菜单UIView以外的任何地方时,我想关闭菜单。

菜单:

I'd like this menu to be closed.

4 个答案:

答案 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更加保险。