我不知道如何在Swift中实现以下功能:
我正在iPad应用程序中显示模态表单弹出窗口。为了关闭此视图,我添加了一个按钮来关闭它。但我真正想要的是在单击视图之外时关闭它。几乎与弹出菜单相同的行为。我尝试通过添加轻拍手势、使其成为弹出菜单、任何演示风格来实现这一点,但都没有成功。
是否有人可能已经做过这个,以便您可以指导我正确的方向?
我需要在我的应用程序中显示一些屏幕,比如弹出屏幕,因此我创建了一个基类,它看起来像这样:
class MyBasePopUp: UIViewController, UIGestureRecognizerDelegate {
var tap: UITapGestureRecognizer!
override func viewDidAppear(_ animated: Bool) {
tap = UITapGestureRecognizer(target: self, action: #selector(onTap(sender:)))
tap.numberOfTapsRequired = 1
tap.numberOfTouchesRequired = 1
tap.cancelsTouchesInView = false
tap.delegate = self
self.view.window?.addGestureRecognizer(tap)
}
internal func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
internal func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
let location = touch.location(in: self.view)
if self.view.point(inside: location, with: nil) {
return false
}
else {
return true
}
}
@objc private func onTap(sender: UITapGestureRecognizer) {
self.view.window?.removeGestureRecognizer(sender)
self.dismiss(animated: true, completion: nil)
}
这只是为了关闭弹出窗口,如果您有多个手势,请小心。
presentedViewController.view
而不是self.view
,并且我必须删除onTap
的第一行,否则它只能工作一次。 - John Montgomerylet location = touch.location(in: self.view)
中,我必须更改 self.view
以使用我的特定视图,但之后,一切都按预期工作。 - David A