thislooksfun/swiftlysearch
iOS 15 introduced [`.searchable()`][searchable], which is an official search bar
Installation
Manual:
Update your Package.swift file:
let package = Package(
...,
dependencies: [
.package(
url: "https://github.com/thislooksfun/SwiftlySearch.git",
from: "1.0.0"),
...
],
...
)In Xcode:
- Go to File > Swift Packages > Add Package Depencency...
- Enter
https://github.com/thislooksfun/SwiftlySearchas the URL - Select your desired versioning constraint
- Click Next
- Click Finish
Usage
import SwiftlySearch
struct MRE: View {
let items: [String]
@State
var searchText = ""
var body: some View {
NavigationView {
List(items.filter { $0.localizedStandardContains(searchText) }) { item in
Text(item)
}.navigationBarSearch(self.$searchText)
}
}
}Known issues:
(#12) NavigationLinks inside the resultContent don't work. This is a limitation of the UIKit/SwiftUI interaction, and thus out of my hands. If you require a seperate view for displaying search results you can use a workaround like shown below:
struct ContentView: View {
@State
var searchText: String = ""
var body: some View {
NavigationView {
ZStack {
if searchText.isEmpty {
NormalView()
} else {
SearchResultsView(text: searchText)
}
}
.navigationBarSearch($searchText)
}
}
}
struct NormalView: View {
var body: some View {
Text("Some view")
}
}
struct SearchResultsView: View {
var text: String
var body: some View {
VStack {
Text("You searched for \(text)")
NavigationLink(destination: Text(text)) {
Text("Let's go!")
}
}
}
}[searchable]: https://developer.apple.com/documentation/swiftui/form/searchable(text:placement:)
Package Metadata
Repository: thislooksfun/swiftlysearch
Default branch: master
README: README.md