ios - 如何在点击 Swift4 时关闭 UIView

标签 ios swift uiview uikit uigesturerecognizer

我有一个 UIView,每次我在另一个 View 中按下按钮时都会显示它

@IBOutlet weak var view1: UIView!
@IBOutlet weak var view2: UIView! 

@IBAction func showView(_ sender: Any) {
    view2.isHidden = false
}

我想要的是添加一个点击手势,允许我在每次点击 View 外部时隐藏 view2,并且由于这些 View 是可拖动的,我希望第二个 View 在隐藏时不可点击(这样如果我在我的视线下触摸我不会冒险移动它。 这是我尝试过的:

  1. var gesture : UITapGestureRecognizer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(closeView), name: NSNotification.Name("CloseView"), object: nil)
    
    
        gesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.closeView))
    }
    @objc func closeView() {
        if view2.isHidden == false {
            view2.isUserInteractionEnabled = true
            view2.isHidden = false
            self.view.removeGestureRecognizer(gesture!)
        } else {
            view2.isHidden = true
            view2.isUserInteractionEnabled = true
            self.view.addGestureRecognizer(gesture!)
        }
    
    }
    
  2. let closeTapGesture = UITapGestureRecognizer(target: view, action: #selector(getter: view2.isHidden)
        view.addGestureRecognizer(closeTapGesture)
    

这些都不起作用,我该怎么办?

最佳答案

您需要检查您是否确实在 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
    }

关于ios - 如何在点击 Swift4 时关闭 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55165014/

相关文章:

ios - UIStatusBar 风格与 UINavigationBar 一致

ios - 以编程方式制作多个可拖动 View 的最佳方法是什么?

ios - 更新UI时如何同时执行2个函数

ios - 在 UIView.animateWithDuration 之前完全取消隐藏 View

ios - 如何使用 Frame Size 从 ViewController 调用自定义 UIView

iphone - 如何为 View 转换的一部分设置动画

ios - 协议(protocol)扩展,变异功能

ios - 尝试实现 Facebook 即时文章页面,但我无法获取 ImageView 高度以进行动画处理

ios - 更改 UIButton 矩形而不使用drawRect

ios - 返回 GameScene 时内存增加