SwiftUI NavigationButton:如何导航到不同的目的地
Posted
技术标签:
【中文标题】SwiftUI NavigationButton:如何导航到不同的目的地【英文标题】:SwiftUI NavigationButton: How to navigate to different destinations 【发布时间】:2019-06-29 16:34:21 【问题描述】:List(list) feature in
NavigationButton(destination: destination))
ListCell(feature: feature)
我想在点击行时导航到不同的视图,方法是更改目标视图而不是每行的单个视图
有办法吗?
【问题讨论】:
【参考方案1】:是的,有办法。
这是具有完全动态“单元格”的主体。 tableRow
函数渲染单元格的内容,而destination
函数计算NavigationButton
的目标。
var body: some View
List
// Renders the table with all the active conversations
ForEach(appData.currentUser.conversations) conversation in
NavigationButton(destination: self.destination(for: conversation) )
self.tableRow(for: conversation)
destination
函数非常简单,这里唯一的“技巧”是使用AnyView
作为返回类型。
private func destination (for conversation: Conversation) -> AnyView
if conversation.mode == .personal
return AnyView(ConversationDetail(conversation: conversation))
else if conversation.mode == .groupChat
return AnyView(ConversationDetailGroup(conversation: conversation))
else
return AnyView(ConversationDetailJoin(conversation: conversation))
【讨论】:
请注意,由于视图是结构,因此每次单击一行时都会导航到新视图。您不是在修改单个视图,而是在拆除旧视图并根据目标函数的输入构建新视图。 @DLAN 根据你所说的,你有更好的方法吗? 不,部分原因是我已经有 10 个月没有做过 SwiftUI(等待更成熟一点),部分原因是我认为发生这种情况不一定是坏事,只是需要注意的事情。如果它工作正常,则无需修复任何东西。如果您因此而开始遇到问题,那么我建议您发布一个新问题。以上是关于SwiftUI NavigationButton:如何导航到不同的目的地的主要内容,如果未能解决你的问题,请参考以下文章
navigationBarItems 中的 SwiftUI NavigationButton
如何在没有 SwiftUI 中的 NavigationButton 的情况下导航到 NavigationView 中的另一个视图?
SwiftUI NavigationButton:如何导航到不同的目的地