【问题标题】:SwiftUI NavigationButton: How to navigate to different destinationsSwiftUI NavigationButton:如何导航到不同的目的地
【发布时间】:2019-06-29 16:34:21
【问题描述】:
List(list) { feature in
                NavigationButton(destination: destination)) {
                    ListCell(feature: feature)
                }
            }

我想在点击行时导航到不同的视图,方法是更改​​目标视图而不是每行的单个视图

有办法吗?

【问题讨论】:

    标签: ios swiftui xcode11


    【解决方案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(等待更成熟一点),部分原因是我认为发生这种情况不一定是坏事,只是需要注意的事情。如果它工作正常,则无需修复任何东西。如果您因此而开始遇到问题,那么我建议您发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2022-01-13
    • 1970-01-01
    • 2021-09-25
    • 2019-03-26
    相关资源
    最近更新 更多