質問: ロケーション検索結果のオーバーレイ 私はユーザーがアドレス情報を入力できるようにするアプリケーションの1つに検索バーを追加しようとしており、可能な結果(およびキーボード)とともにテーブルビューが表示されます。基本的に地図アプリで提供されているのと同じ機能です。これを行う簡単な方法はありますか? !enter image description here It would be nice to have a Current Location default & autocomplete as well, but not necessary. I can build the UI from scratch, but I don't know how to get back the search results. Can I use geocoder and parse the results into a tableview?
回答: これを行うための標準コンポーネントは、 UISearchDisplayController です。 。 結果を表示するための `UISearchBar` と `UITableView` を提供します。 次に、必要に応じてテーブルビューのコンテンツと外観をカスタマイズできます。 そのようなコントローラによって実行されるアクションを制御するには、 UISearchDisplayDelegate プロトコル。 例を慎重に見てみることをおすすめしますアプリにあります。 **編集** オートコンプリート機能を実装するには、 `UISearchDisplayDelegate` プロトコルの `searchDisplayController:shouldReloadTableForSearchString` メソッドを実装できます。これは、ユーザーが入力したすべての文字で呼び出されます。 `geocoder` という名前の `CLGeocoder` プロパティがあり、目印を`目印`という `NSArray` ライブの自動完成を実現する方法の例を次に示します。 ``` -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [self.geocoder geocodeAddressString:searchString completionHandler:^(NSArray *placemarks, NSError *error) { self.placemarks = placemarks; [self.searchDisplayController.searchResultsTableView reloadData]; }]; return NO; } ``` 検索が変更されるたびに、そのような文字列を使用して順方向ジオコーディングを実行します。 `completionHandler` ブロックでは、新しく見つかった目印を`目印`プロパティに割り当てて、表を再読み込みします。 検索は非同期であるため、完了ハンドラのテーブルをリロードし、デリゲートメソッドでNOを返します。 YESを返すと、検索が終了する前にテーブルがリロードされます。これは必要な動作ではありません。 最後に、私が提供したコードは最小限であることを覚えておいてください。実際のアプリケーションでは、 `kCLErrorGeocodeFoundNoResult` 、 `kCLErrorGeocodeFoundPartialResult` 、 `kCLErrorGeocodeCanceled` など、ジオコーダが実行する可能性のあるエラーを処理することをおすすめします。 こちらに記載されています。