点击视图后隐藏视图

时间:2018-07-25 18:52:34

标签: ios swift xcode view uiviewcontroller

点击后,我试图隐藏一个视图。为了做到这一点,我使用touchesBegan来检测视图是否被点击,如果被点击,它应该执行诸如隐藏视图和顶部视图的操作。定义了这两个视图:

   @IBOutlet weak var theDarkView: UIView!
@IBOutlet weak var theFinalView: UIView!

这是我想出的代码。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        //-- hides the view whenever its touched
        if let touch = touches.first {
            if touch.view == self.theDarkView {
                if theDarkView.isHidden == false || theFinalView.isHidden == false {
                    theDarkView.isHidden = true
                    theFinalView.isHidden = true
                }
            } else {
                return
            }
        }
    }

如果您能帮助我并向我展示正确的方法,并告诉我在哪里弄乱了我的方法,那将不胜感激!

2 个答案:

答案 0 :(得分:0)

您的代码有效。当您点击theDarkView时,所有视图均设置为隐藏。

如果在您的项目中不起作用,则必须在情节提要上连接IBOutlet。

编辑:

如果视图嵌入在scrollView中,则将无法正常工作,因为UIScrollView会拦截这些touchs事件。

解决方案是UIScrollView的子类,或者使用UITapGestureRecognizer代替touchesBegan

可能的代码解决方案是在viewDidLoad中添加以下内容:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapRecognized))
tapGesture.numberOfTapsRequired = 1
tapGesture.isEnabled = true
tapGesture.cancelsTouchesInView = false
theDarkView.addGestureRecognizer(tapGesture)

将tapGesture添加到视图中,然后添加方法:

@objc func tapRecognized() {
    if red.isHidden == false || blue.isHidden == false {
        red.isHidden = true
        blue.isHidden = true
    }
}

答案 1 :(得分:0)

您的代码没问题,这也可以完成相同的工作

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
     theDarkView.isHidden = touches.first?.view == self.theDarkView 
     theFinalView.isHidden = theDarkView.isHidden
}