ロケーション検索結果のオーバーレイ

私はユーザーがアドレス情報を入力できるようにするアプリケーションの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?

7
nl ru de

1 答え

これを行うための標準コンポーネントは、 UISearchDisplayController です。 。

結果を表示するための UISearchBarUITableView を提供します。 次に、必要に応じてテーブルビューのコンテンツと外観をカスタマイズできます。

そのようなコントローラによって実行されるアクションを制御するには、 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を返すと、検索が終了する前にテーブルがリロードされます。これは必要な動作ではありません。

最後に、私が提供したコードは最小限であることを覚えておいてください。実際のアプリケーションでは、 kCLErrorGeocodeFoundNoResultkCLErrorGeocodeFoundPartialResultkCLErrorGeocodeCanceled など、ジオコーダが実行する可能性のあるエラーを処理することをおすすめします。 こちらに記載されています。

10
追加された
@JamesWeirは私の更新された答えをチェックします。
追加された 著者 Gabriele Petronella,
異なるジオコーダーを検討することもできます。 Googleに試してみてください。他の質問をすることができない場合は、
追加された 著者 Gabriele Petronella,
サンプルアプリケーションを取得できません
追加された 著者 Patel Jigar,
それは物事のUI側に最適です。私の質問の2番目の部分にあるアイデアは、検索結果ですか?私はUISearchBarの入力を開始し、可能な場所をテーブルに表示させたいと考えています(私はApple Mapsを使用していると仮定しています)。
追加された 著者 James Weir,
さて、すべては今働いていますが、結果は私が望んでいたものではありません。 CLGeocoderは最大の結果を出しません。たとえば、上記のスクリーンショットのように「Apple」を検索すると、住所を基準にして2回しかヒットしません。 Appleのドキュメントを見ると、CLGeocoderを使ってHQを見つけるには、「1 Infinite Loop、Cupertino、CA」を検索する必要があると言います。上記の図のように、マップアプリが楽しむ検索結果を得る方法はありません。目標は、正確な住所情報を必要としないように、ユーザーが場所を簡単に検索できるようにすることでした。
追加された 著者 James Weir,
助けてくれてありがとう。これを私がやろうとしていることに答えたので解決したとマークしてください。
追加された 著者 James Weir,