whe*_*set 15 ios swift swiftui swiftui-navigationview
我目前正在开发一个使用NavigationStack. 我想知道我应该把NavigationPath变量放在哪里,这样我就可以在任何地方修改它。
我尝试将它作为变量放入根视图中State,但我似乎很难在深度嵌套的视图中修改它。
struct RootView: View {
@State var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
// ...
}
}
}
struct SubView: View {
var body: some View {
Button("Push to root") {
// how should I access `path` from here?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将其作为全局变量,但这可能会导致导航在所有场景之间共享,这不是我的意图。
class Router: ObservableObject {
static var shared = Router()
@Published var path = NavigationPath()
}
struct RootView: View {
@ObservedObject var router = Router.shared
var body: some View {
NavigationStack(path: $router.path) {
// ...
}
}
}
struct SubView: View {
@ObservedObject var router = Router.shared
var body: some View {
Button("Push to root") {
router.path = []
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人提供可行的设计或任何建议,我将不胜感激。
使用@Binding与将写访问权限传递给任何其他类型的相同的方法@State。尝试坚持使用 Swift 中的值类型,而不是回退到熟悉的对象来解决问题,这将导致 Swift/SwiftUI 使用值语义来消除一致性错误。
| 归档时间: |
|
| 查看次数: |
2568 次 |
| 最近记录: |