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:如何导航到不同的目的地

SwiftUI 官方教程

如何在 SwiftUI 中使用 SFSafariViewController?

在没有按钮的 SwiftUI 中呈现新视图