我想在 SwiftUI 中创建一个视图链,我使用的是 NavigationView 但已被弃用,iOS 16.0 中是否有一些替代方案?
view1 -> view2 -> view3 -> view4 -> root(view3)
enum Screens {
case view1
case view2
}
extension Screens: Hashable {}
final class SettingsNavigationManager: ObservableObject {
@Published var screen: Screens? {
didSet {
print("📱 \(screen)")
}
}
func push(to screen: Screens) {
self.screen = screen
}
func popToRoot() {
self.screen = nil
}
}
struct viewOne: View {
@EnvironmentObject var settingsNavManager: SettingsNavigationManager
var body: some View{
Button("Go to ViewTwo") {
settingsNavManager.push(to: .view2)
}
.background(
NavigationLink(
destination: viewTwo(),
tag: .view2,
selection: $settingsNavManager.screen) { EmptyView() }
)
}
}
我读过有关 NavegationStack 的内容,但我知道,它类似于实现列表和详细信息项。
https://developer.apple.com/documentation/swiftui/migrating-to-new-navigation-types
你可以在你的模型中使用 navigationPath 对象,它会为你管理推送和弹出。
我想在 SwiftUI 中创建一个视图链,我使用的是 NavigationView 但已被弃用,iOS 16.0 中是否有一些替代方案?
view1 -> view2 -> view3 -> view4 -> root(view3)
在这里输入图片描述
enum Screens { case view1 case view2 }
扩展屏幕:可散列{}
最终类 SettingsNavigationManager: ObservableObject {
@Published 变量路径:NavigationPath }
然后你用
初始化导航栈NavigationStack(路径:$settingsNavManager.path){ }
然后就可以使用了
settingsNavigationManager.path.append()
和
removeLast(settingsNavManager.path.count)
作为 push 和 popToRoot
您还可以使用 navigationdestination 来根据您的屏幕枚举调整应调用哪个视图
.navigationDestination(for: Screens.self){ 屏幕输入 切换屏幕{ } }