点击后,我试图隐藏一个视图。为了做到这一点,我使用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
}
}
}
如果您能帮助我并向我展示正确的方法,并告诉我在哪里弄乱了我的方法,那将不胜感激!
答案 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
}