Swift で Apple のマップ アプリケーションと同様の機能を作成しようとしています。UISearchController を通常のビュー (つまり、UITableView ではない) に統合する方法はありますか。ストーリーボードを介してドロップすると、接続された検索バー内をクリックした後にクラッシュします。または、UITableViewでこの結果を達成する方法はありますか?
4 に答える
自分自身を理解しようとしていUISearchController
ます。に設定するtitleView
と便利ですが、私のページの 1 つで、 をsearchBar
の上部近くに配置する必要がありましたUIViewController
。
// Add a normal View into the Storyboard.
// Set constraints:
// - height: 44
// - leading and trailing so that it spans the width of the page
// - vertical position can be anywhere based on your requirements, like near the top
@IBOutlet weak var searchContainerView: UIView!
var searchResultsController = UISearchController()
override func viewDidLoad() {
// TODO: set the searchResultsController to something
let controller = UISearchController(searchResultsController: nil)
// have the search bar span the width of the screen
controller.searchBar.sizeToFit()
// add search bar to empty View
searchContainerView.addSubview(controller.searchBar)
searchResultsController = controller
}
アップデート:
1 つまたは 2 つのプロジェクトに実装UISearchController
した後、検索バーをナビゲーション バーに埋め込むという @adauguet のアプローチに引き寄せられることに気付きました。
これがSwiftのコードです。searchResultsUpdater
ただし、1 つの違いは、すでにテキストの変更をリッスンしているため、searchBar デリゲートを設定しないことです。
override func viewDidLoad() {
super.viewDidLoad()
// locationManager.delegate = self
// locationManager.desiredAccuracy = kCLLocationAccuracyBest
// locationManager.requestWhenInUseAuthorization()
// locationManager.requestLocation()
let locationSearchTable = storyboard!.instantiateViewControllerWithIdentifier("LocationSearchTable") as! LocationSearchTable
resultSearchController = UISearchController(searchResultsController: locationSearchTable)
resultSearchController?.searchResultsUpdater = locationSearchTable
let searchBar = resultSearchController!.searchBar
searchBar.sizeToFit()
searchBar.placeholder = "Search for places"
navigationItem.titleView = resultSearchController?.searchBar
resultSearchController?.hidesNavigationBarDuringPresentation = false
resultSearchController?.dimsBackgroundDuringPresentation = true
definesPresentationContext = true
}
UISearchController
また、マップの検索結果を表示するために使用するプロジェクトをゼロから作成するブログ投稿も書きました。また、ユーザーの位置を取得したり、ピンをドロップしたり、目印を 1 行の住所に解析したり、Apple Maps に移動して道案内を表示する吹き出しボタンを作成したりするなど、マップ プロジェクトで必要となるその他のことも実行します。
http://www.thorntech.com/2016/01/how-to-search-for-location-using-apples-mapkit/
ブログ投稿は非常に長いため、コードにスキップしたい場合は、関連する git リポジトリを次に示します。