ios - 单击 View 外部时如何关闭模态表单?

标签 ios swift

我不知道如何在 Swift 中实现以下目标:

我在我的 iPad 应用程序中显示一个模式表单弹出窗口。为了关闭此 View ,我添加了一个关闭它的按钮。但我真正想要的是当您在 View 外单击时它会消失。几乎与弹出窗口相同的行为。我已经尝试通过添加点击手势来实现这一点,使其成为一个弹出窗口,任何呈现样式,都没有任何效果。

是否有人这样做了,以便您能为我指明正确的方向?

最佳答案

我不得不在我的应用程序中显示一些屏幕,比如弹出窗口,所以我做了一个 看起来像这样的基类:

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)
}

这只是为了关闭弹出窗口,如果您有多个手势,请小心。

关于ios - 单击 View 外部时如何关闭模态表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39943265/

相关文章:

ios - 如何使用 SWIFT 检查 IOS 应用程序是否首次运行

ios - UIView Animate不尊重延迟吗?

Swift:泛型类中的声明

ios - 在 ios 中获取当前的自动对焦系统时崩溃

ios - UIalertcontroller 按钮序列

ios - 如何在 swift 中将辅助功能标题添加到新 View

ios - 检查查询键是否为 nil Parse

ios - 如何使用 Swift 通过 LE 蓝牙将 MIDI 数据从 iOS 发送到 OS X

ios - UISlider 默认拇指颜色

ios - 在某个日期之前设置 localNotification 日期