SwiftUI:自动在视图层次结构中来回导航

时间:2020-05-19 14:55:16

标签: swift uinavigationcontroller swiftui

我正在开发一个SwiftUI应用,其在多个视图上的导航层次看起来像这样:

[地点列表]-> [一个地点的详细信息]-> [地图]

在地图上,不仅会显示先前选择的地点,而且会显示[地点清单]中已知的所有地点。 用户应该能够在地图上选择其他地点并显示其详细信息。 可以从地图中打开[一个地方的详细信息]的另一个实例,但是这样一来,视图堆栈将变得越来越长。 我认为最好返回完整的导航层次结构,然后从[地点列表]中打开另一个[一个地方的详细信息]。

向后导航: [地图]-> [一个地方的详细信息]-> [地方列表]-> [一个地方的详细信息]

但是,我不确定如何最熟练地实施这种方法。我可以用

self.presentationMode.wrappedValue.dismiss()

并一个一个地关闭每个视图,然后在导航中返回。然后,我将从[地点清单]自动切换到另一个详细视图。到目前为止,我还没有尝试过,但是我认为如果这样做,每个封闭视图都会得到一个动画。 我不要你从地图切换到详细信息应该像正常导航一样。

1 个答案:

答案 0 :(得分:0)

在我看来,如果用户可以从[一个地方的详细信息]转到[地图],然后从[地图]到[一个地方的详细信息],您实际上并没有视图层次结构 ]。

鉴于此,最好创建一个新视图,以根据用户操作显示[一个地方的详细信息]或[地图]内容,而隐藏另一个视图。如果我们将此新视图称为[合并],则您的视图层次将变为:

[地点列表]-> [组合]

用户将从[地点列表]导航至[组合]。默认情况下,[组合]将显示一个地方的详细信息。用户可以点击那里的一些按钮来查看地图。 [组合]将隐藏一个地方的细节,并显示地图,但堆栈上将没有导航。

如果用户点击地图上的其他位置,则[组合]将隐藏地图并显示该位置的详细信息。这样,用户可以在细节和地图之间无缝切换。