我每次在另一个视图中按下按钮时都会显示一个UIView
@IBOutlet弱var view1:UIView!@IBOutlet弱var view2:UIView!
@IBAction func showView(_ sender:Any){ 视图2 ….
您的点击手势应该只处理closeView。
@objc func closeView() { view2.isHidden = true view2.isUserInteractionEnabled = false gesture?.isEnabled = false }
然后单击按钮以显示您的view2应该调用它。
func showView() { view2.isHidden = false view2.isUserInteractionEnabled = true gesture?.isEnabled = true }
你需要检查你是否真的在view2之外点击:
var gesture : UITapGestureRecognizer? override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(closeView), name: NSNotification.Name("CloseView"), object: nil) let gesture = UITapGestureRecognizer(target: self, action: #selector(closeView(_:))) view.addGestureRecognizer(gesture) self.gesture = gesture } @objc private func closeView(_ tapGestureRecognizer: UITapGestureRecognizer) { let location = tapGestureRecognizer.location(in: view2) guard view2.isHidden == false, !view2.bounds.contains(location) else { //We need to have tapped outside of view 2 return } view2.isHidden = true }