【问题标题】:Programmatically segue to SwiftUI view以编程方式转到 SwiftUI 视图
【发布时间】:2019-10-02 11:56:19
【问题描述】:

Integrating SwiftUI WWDC 视频中,它展示了使用 IBSegueAction 转换到 SwiftUI 视图的示例,是否可以通过编程方式执行此操作?

我有一个带有 UIKit TableViewController 的 SwiftUI 应用程序(通过 UIViewControllerRepresentable),我希望将这张表从另一个 SwiftUI 视图转移。

基本上: SwiftUI TabView -> UIKit TableView -> SwiftUI 视图

或者我需要设置故事板来实现这个转场吗?

【问题讨论】:

  • 您不能,请参见此处:stackoverflow.com/questions/36216582/…
  • 我认为您可以使用 NavigationLink 推送,将您的单元格代码放入 NavigationLink
  • Segue 与故事板深度集成。我的意思是说你不能简单地创建一个并以编程方式使用它 - 你需要一个故事板。现在,如果您想要将 UITableView 推送到 SwiftUI 堆栈并从那里推送 SwiftUI 视图...可能是可能的。只是不使用segue。
  • @dfd 我认为会是这样。将 UITableView 添加到 SWiftUI 堆栈实际上非常简单(使用 UIViewControllerRepresentable),但现在它从 UITableView 转到另一个 SwiftUI 视图,这看起来可能是不可能的,如果不使用故事板 segue。
  • 我有一些类似的东西 - 我在我的 SwiftUI 应用程序中使用了 UITableView/UINavigationController。 (不要问为什么,这与替代方案的各种弱点有关,列表/导航视图。)我能够使用通知进行实际通信(再次不要问,但我也从来没有直接组合工作,实际上是一个SO上的人建议使用“包装器”视图,因为,所有不是 SwiftUI中的视图)。最后我选择了一个UIKit应用程序。SwiftUI不够健壮。 ...

标签: ios swift swiftui


【解决方案1】:

使用 Bool 创建一个隐藏的导航链接。

NavigationLink(destination: NextView(), isActive: self.isShowNext) {
    Text("")
}.hidden()

【讨论】:

    【解决方案2】:

    如果设置了navigationController 属性,理论上可以在您的Coordinator 中为您的UIViewRepresentable 推送UIHostingController 与您的SwiftUI 视图:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
        let view = SomeView()
        navigationController?.pushViewController(UIHostingController(root: view))
    }
    

    但我认为您会发现使用UIKit 最简单,直到您认为不再需要它为止。所以而不是:

    TabView => NavigationView => wrapped UITableViewController => some SwiftUI View

    应该是:

    UITabBarController => UINavigationController => UITableViewController => UIHostController(root: SwiftUIView)

    但是你为什么不直接使用List呢?

    TabView => NavigationView => List => SwiftUIView

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2019-10-24
      • 2022-01-24
      相关资源
      最近更新 更多