SwiftUI NavigationButton: как перемещаться в разные пункты назначения - PullRequest
0 голосов
/ 29 июня 2019
List(list) { feature in
                NavigationButton(destination: destination)) {
                    ListCell(feature: feature)
                }
            }

Я хочу перейти к различным представлениям при нажатии на строку, изменив назначение представление вместо одного представления для каждой строки

есть ли способ сделать это?

1 Ответ

2 голосов
/ 29 июня 2019

Да, есть способ.

Это основной корпус с полностью динамической «клеткой».Функция 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))
    }
}
...