以编程方式切换到SwiftUI视图。

3
Integrating SwiftUI WWDC视频中,它展示了使用IBSegueAction转换到SwiftUI视图的示例,是否可以通过编程实现这个功能?
我有一个SwiftUI应用程序,其中包含一个UIKit TableViewController(通过UIViewControllerRepresentable),我想从这个表格中转换到另一个SwiftUI视图。
基本上是这样的: SwiftUI TabView -> UIKit TableView -> SwiftUI View
或者我需要设置故事板来实现这个转换吗?

你不能这样做,还可以在这里查看:https://dev59.com/o1oV5IYBdhLWcg3wc-no - koen
我认为你可以使用NavigationLink来进行推送,将你的单元格代码放在NavigationLink中。 - Jayraj Vala
1
Segue与Storyboard紧密集成在一起。所谓紧密集成,指的是您无法仅仅通过编程创建一个segue并使用它 - 您需要一个Storyboard。现在,如果您想将一个UITableView推入到SwiftUI堆栈中,并从那里推出一个SwiftUI视图...那可能是有可能的。只是不能使用segue来实现。 - user7014451
@dfd 我本以为会是这样的情况。将UITableView添加到SwiftUI堆栈中实际上非常简单(使用UIViewControllerRepresentable),但是从UITableView转到另一个类似的SwiftUI视图可能是不可能的,除非使用故事板segue。 - jsrgnt
我曾经接近这样做 - 在我的SwiftUI应用中,我使用了UITableView/UINavigationController。(别问为什么,这与另一种选择的弱点有关,即列表/NavigationView。)我实际上能够通过通知进行通信(再次不要问,但是我从来没有成功地使用Combine,事实上,这里的某个人建议使用一个“包装器”视图,因为在SwiftUI中,并不是所有东西都是视图)。最终,我选择了一个UIKit应用程序。SwiftUI还不够稳定可靠... - user7014451
2个回答

0
使用布尔值创建一个隐藏的导航链接。
NavigationLink(destination: NextView(), isActive: self.isShowNext) {
    Text("")
}.hidden()

-1

在你的Coordinator中,理论上可以通过设置navigationController属性,使你的UIViewRepresentable推送一个带有SwiftUI视图的UIHostingController

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接