【发布时间】:2020-03-13 10:15:12
【问题描述】:
我有一个 macOS Master/Detail 应用程序,它使用 NavigationView,左侧面板中有侧边栏菜单,右侧面板中有一系列详细视图。
我想在用户选择不同的侧边栏菜单选项时保留详细视图,这样如果用户通过选择以前的选择菜单选项切换回来,那么应用程序应该显示最初创建的详细视图以及任何用户更改或选择。
目前,Swifui在选择菜单选项时从头开始创建一个新视图,而不是显示先前创建的。例如,如果详细视图有一个 ListView 并且用户之前选择了一个项目,那么这个选择会像之前的任何滚动位置一样丢失。
有没有办法用 SwiftUI 实现这一点。
【问题讨论】:
-
目前 SwiftUI 不支持滚动位置持久性,但从概念上讲,其他所有内容(如选择、用户更改)都应该存储在模型中,当它再次出现时将由视图呈现.所以,你宁愿需要重新考虑你的应用程序的设计。而且您无法保留查看它只是结构,值。
-
嗯,这就是我所怀疑的,所以使用“@State”实际上是没用的,因为如果迷路了,需要使用“@EnvironmentObject”或其他东西来保留用户会话的状态,而应用程序正在运行。
-
@State仅用于视图内部状态,例如隐藏/显示某些内容、突出显示等,但持久视图模型应该存储在外部某处,是的,它可能是@EnvironmentObject、@987654323 @(到 ObservableObject)等 -
不得不将这个视图状态存储在某处,而不是简单地保留视图并能够显示/隐藏视图的相同实例(如果已经创建了一个实例),这似乎太过分了。我想我可以尝试使用 TabbedView 来查看是否会保留标签内容视图。
标签: swiftui