Tenho uma tela no aplicativo iOS com NavigationStack (ou NavigationView) que contém diferentes elementos. Um deles é a Lista pesquisável, que está encapsulada no NavigationLink. Portanto, essa lista pesquisável aparece em uma nova tela.
E quando o usuário seleciona algum elemento da Lista, ele deve retornar automaticamente à tela anterior sem dois cliques adicionais nos botões Cancelar (se usar a pesquisa) e depois "Voltar".
Existe alguma maneira certa de fazer isso? Obrigado por qualquer conselho!
import SwiftUI
struct TheItem: Identifiable {
let id = UUID()
let name: String
}
class SomeModel: ObservableObject {
@Published var selectedId: UUID?
@Published var searchText: String = ""
var items: [TheItem] = [
TheItem(name:"Item 1"),
TheItem(name:"Item 2"),
TheItem(name:"Item 3"),
// ...
TheItem(name:"Item N")
]
var filteredItems: [TheItem] {
guard !searchText.isEmpty else { return self.items }
return self.items.filter { item in
item.name.lowercased().contains(self.searchText.lowercased())
}
}
var selectedItemName: String {
if selectedId != nil {
return filteredItems.first(where: {$0.id == selectedId})?.name ?? "-"
}
return "-"
}
init () {
selectedId = items.first?.id
}
}
struct TestNavigationLinkBackkView: View {
@EnvironmentObject private var model: SomeModel
var body: some View {
NavigationStack {
NavigationLink(model.selectedItemName) {
List {
Picker("Item", selection: $model.selectedId) {
ForEach(model.filteredItems) { item in
Text(item.name).tag(item.id)
}
}
}
.searchable(text: $model.searchText, placement: .navigationBarDrawer(displayMode: .always))
.pickerStyle(.inline)
}
}
}
}
#Preview {
TestNavigationLinkBackkView()
.environmentObject(SomeModel())
}