13

Swift で Apple のマップ アプリケーションと同様の機能を作成しようとしています。UISearchController を通常のビュー (つまり、UITableView ではない) に統合する方法はありますか。ストーリーボードを介してドロップすると、接続された検索バー内をクリックした後にクラッシュします。または、UITableViewでこの結果を達成する方法はありますか?

4

4 に答える 4

8

自分自身を理解しようとしてい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 リポジトリを次に示します。

https://github.com/ThornTechPublic/MapKitTutorial

于 2015-08-28T16:18:14.800 に答える