swift - SwiftUI 中的推送、弹出 View Controller 等效项

标签 swift uinavigationcontroller swiftui navigationlink

什么相当于 SwiftUI 中 View Controller PushPop

最佳答案

根:

window.rootViewController = UIHostingController(rootView: ContentView().environmentObject(Model()))

iOS 版本 13.1:

class Model: ObservableObject {
    @Published var pushed = false
}

struct ContentView: View {
    @EnvironmentObject var model: Model

    var body: some View {
        NavigationView {
            VStack {
                Button("Push") {
                    self.model.pushed = true
                }

                NavigationLink(destination: DetailView(), isActive: $model.pushed) { EmptyView() }
            }
        }
    }
}

struct DetailView: View {
    @EnvironmentObject var model: Model

    var body: some View {
        Button("Bring me Back") {
            self.model.pushed = false
        }
    }
}

删除默认的后退按钮并添加我们自己的后退按钮将让我们顺利通过,直到 Apple 修复该错误。

class Model: ObservableObject {
    @Published var pushed = false
}

struct ContentView: View {
    @EnvironmentObject var model: Model

    var body: some View {
        NavigationView {
            VStack {
                Button("Push") {
                    self.model.pushed = true
                }

                NavigationLink(destination: DetailView(), isActive: $model.pushed) { EmptyView() }
            }
        }
    }
}

struct DetailView: View {
    @EnvironmentObject var model: Model

    var body: some View {
        Button("Bring me Back") {
            self.model.pushed = false
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading: MyBackButton(label: "Back!") {
            self.model.pushed = false
        })
    }
}

struct MyBackButton: View {
    let label: String
    let closure: () -> ()

    var body: some View {
        Button(action: { self.closure() }) {
            HStack {
                Image(systemName: "chevron.left")
                Text(label)
            }
        }
    }
}

more to refer

关于swift - SwiftUI 中的推送、弹出 View Controller 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59527639/

相关文章:

忽略返回值的Swift范围?

swift - 在 View Controller 之间添加一个后退栏按钮

ios - 自定义 UINavigationBar 适用于模拟器,但不适用于已发布版本

ios - SwiftUI列表未显示所有项目

ios - 从 'UIViewController?' 向下转换为 'UIViewController' 仅解开可选值;您的意思是使用 '!' 吗?

ios - 使用旧的 swift 版本

swiftui - 使 UIKit ContextMenu 预览提供程序框架适合 UIHostingControler 内的 SwiftUI View

ios - SwiftUI 循环索引

objective-c - XC测试 : Value not retrieved in NSUserdefaults in UI test Class

objective-c - 如何实现在一个部分中点击一个 UITableViewCell 导航到多个 UITableViewCells 以获取详细信息?