ios - 选择同一项目时,SwiftUI 三列导航布局未关闭
问题描述
I'm using a three column navigation layout and facing the issue, that when selecting the same second column's item, the drawers won't close. 如果我将文件应用程序作为参考,再次选择相同的项目将关闭抽屉。有人可以告诉我是什么问题吗?是drawer
正确的术语吗?
在此先感谢,卡斯滕
重现代码:
import SwiftUI
extension UISplitViewController {
open override func viewDidLoad() {
preferredDisplayMode = .twoBesideSecondary
}
}
@main
struct TestApp: App {
@Environment(\.factory) var factory
var body: some Scene {
WindowGroup {
NavigationView {
ContentView(viewModel: factory.createVM1())
ContentView2(viewModel: factory.createVM2())
EmptyView()
}
}
}
}
struct FactoryKey: EnvironmentKey {
static let defaultValue: Factory = Factory()
}
extension EnvironmentValues {
var factory: Factory {
get {
return self[FactoryKey.self]
}
set {
self[FactoryKey.self] = newValue
}
}
}
class Factory {
func createVM1() -> ViewModel1 {
ViewModel1()
}
func createVM2() -> ViewModel2 {
ViewModel2()
}
func createVM3(from item: ViewModel2.Model) -> ViewModel3 {
ViewModel3(item: item)
}
}
class ViewModel1: ObservableObject {
struct Model: Identifiable {
let id: UUID = UUID()
let name: String
}
@Published var items: [Model]
init() {
items = (1 ... 4).map { Model(name: "First Column Item \($0)") }
}
}
struct ContentView: View {
@Environment(\.factory) var factory
@StateObject var viewModel: ViewModel1
var body: some View {
List {
ForEach(viewModel.items) { item in
NavigationLink(
destination: ContentView2(viewModel: factory.createVM2()),
label: {
Text(item.name)
})
}
}
}
}
class ViewModel2: ObservableObject {
struct Model: Identifiable {
let id: UUID = UUID()
let name: String
}
@Published var items: [Model]
init() {
items = (1 ... 4).map { Model(name: "Second Column Item \($0)") }
}
}
struct ContentView2: View {
@Environment(\.factory) var factory
@StateObject var viewModel: ViewModel2
var body: some View {
List {
ForEach(viewModel.items) { item in
NavigationLink(
destination: Detail(viewModel: factory.createVM3(from: item)),
label: {
Text(item.name)
})
}
}
}
}
class ViewModel3: ObservableObject {
let item: ViewModel2.Model
init(item: ViewModel2.Model) {
self.item = item
}
}
struct Detail: View {
@StateObject var viewModel: ViewModel3
var body: some View {
Text(viewModel.item.name)
}
}
解决方案
推荐阅读
- javascript - jQuery AJAX JSON 数据被展平
- node.js - 用 Sequelize 返回外键的表数据
- wordpress - 仅在需要时将多部分编码标志添加到 WordPress 元框
- java - Thymleaf 模板无法评估与模型相关的表达式
- asp.net-mvc - 多个共享布局 mvc
- ruby-on-rails - 无法通过 React Native 应用调用验证 Rails API 中的 CSRF 令牌
- android - 如何更新视图位置
- php - 我在 cPanel 上放了 cron 作业命令,但它不起作用
- python - 如何将 __init__ 参数传递给使用 qmlRegisterType 注册的类?
- tfs-2015 - 如何使用户能够在 Backlog 视图中添加功能