используя Navigationlink в таблице действий swiftui

Кто-нибудь знает, как я могу перейти к другому представлению из таблицы действий в Swiftui?

В настоящее время я использую это как кнопку в таблице действий:

.actionSheet(isPresented: $actionsheet) {
    ActionSheet(title: Text("Actions"), message: Text("Choose action"), buttons: [
        .default(
            NavigationLink(destination: adddetails()) {
                Text("Add details")
            }
        ),
        .default(Text("New")),
        .default(Text("Delete")),
        .cancel()
    ])                              
}

Но строить не будет. Хотя Xcode не выдает ошибок. Кто-нибудь знает, что я могу сделать?


person chrispsv    schedule 15.03.2021    source источник


Ответы (1)


Вы можете управлять NavigationLink программно, используя параметр isActive с привязкой. Затем в вашем ActionSheet вы можете переключить эту привязку.

Другой ключ заключается в том, что NavigationLink должен быть встроен в вашу исходную иерархию представлений, а не ActionSheet. Вы можете условно отобразить его с помощью оператора if, чтобы он был там только в том случае, если он активен (и, следовательно, невидим, если не нажата кнопка навигации):

struct ContentView: View {
    @State private var actionSheetOpen = false
    @State private var navigationLinkActive = false
    
    var body: some View {
        NavigationView {
            if navigationLinkActive {
                NavigationLink("", destination: Text("Detail"), isActive: $navigationLinkActive)
            }
            
            Button("Open action sheet") {
                actionSheetOpen.toggle()
            }
            .actionSheet(isPresented: $actionSheetOpen) {
                ActionSheet(title: Text("Actions"), message: Text("Choose action"), buttons: [
                    .default(Text("Navigation"), action: {
                        navigationLinkActive = true
                    }),
                    .default(Text("New")),
                    .default(Text("Delete")),
                    .cancel()
                ])
            }
            
        }.navigationViewStyle(StackNavigationViewStyle())
    }
}
person jnpdx    schedule 15.03.2021