0

在我的应用程序中,我想执行基于 UITapGestureRecognizer 的 segue。如果点击位于屏幕的顶部区域,则应执行对 SettingsView 的 segue。

在 UIKit 中,这非常简单。我通过将它包装在一个 if 语句中触发了 UITapGestureRecognizer 中的 performSegue。

现在我想在 SwiftUI 中编写 SettingsView()。SettingsView() 将嵌入在 UIHostingController 中。

我的问题是:我怎样才能对这个 UIHostingController 执行 segue(同时告诉 UIHostingController 要显示哪个视图)?

我尝试使用新的@IBSegueAction。使用这个@IBSegueAction 的原因是我可以用它来告诉 UIHostingController 要显示哪个视图。问题是我现在不能插入条件。无论点击屏幕上的哪个位置,都会执行 segue。我还没有找到在@IBSegueAction 中取消segue 的方法。

我的代码目前如下所示:

    @IBSegueAction func showSettingsHostingControler(_ coder: NSCoder, sender: UITapGestureRecognizer, segueIdentifier: String?) -> UIViewController? {

        let location = sender.location(in: self.tableView)
        if let _ = self.tableView.indexPathForRow(at: location) {
            return nil
        } else {
            if location.y < 32 {
                if location.x < view.bounds.midX {
                    direction = .left
                } else {
                    direction = .right
                }
                return UIHostingController(coder: coder, rootView: SettingsView())
            }
        }

        return nil
    }

目前的结果是,当点击错误的区域时,应用程序会转到不存在的 Nil 视图。

4

1 回答 1

0

基于 UITapGestureRecognizer。如果水龙头位于屏幕的顶部区域

在我看来,您的点击手势识别器附加到了错误的视图。这里不应该做出任何决定。将视图定位在屏幕的顶部区域并将轻击手势识别器附加到该视图。这样,如果该视图被点击,则无需做出决定:点击在正确的位置。

于 2019-06-23T12:05:31.633 回答