bobbby6969696
bobbby6969696

Reputation: 21

SwiftUI .searchable new view

I am creating an app and I am using .searchable for my home view, but once it is clicked, I want it to bring up a new view where results of what is being searched is shown, and once the cancel button is clicked goes back to the home view.

I currently have .searchable(text: $searchText) and it is showing the search bar, and I have tried .overlay{SearchView()} but it is just putting it over the home view. Is there a way to do this.

Upvotes: 2

Views: 1217

Answers (1)

Ashley Mills
Ashley Mills

Reputation: 53181

You need to use the @Environment variable isSearching to determine which view to display, e.g.

struct ContentView: View {

    @State private var searchText = ""

    var body: some View {
        NavigationView {
            SearchingView(searchText: $searchText)
                .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always), prompt: "Search")
                .navigationTitle("Title")
        }
    }
}


struct SearchingView: View {
    @Environment(\.isSearching) private var isSearching
    @Binding var searchText: String
    
    var body: some View {
        if isSearching {
            List("This is displayed when searching".components(separatedBy: " "), id: \.self) { word in
                Text(word )
            }
            .listStyle(.plain)
        } else {
            Text("Here is the normal view")
        }
    }
}

enter image description here

Upvotes: 1

Related Questions