3

iPhone開発初心者です。Googleマップの注釈吹き出しウィンドウに改行を受け入れる方法に関するいくつかの質問を読んでいます。私が読んだすべてのチュートリアルでは、mapView:didSelectAnnotationViewメソッドを起動する必要があります。しかし、これをトリガーする方法がわかりません。私が試したことには

  • UIViewController を拡張する MapViewController.m ファイルにメソッドを配置する
  • MKMapView を拡張する MapView.m ファイルにメソッドを配置し、ストーリーボードの Mapview 要素が使用するクラスとして参照するようにします。

xcode、objective c、iphone の開発については理解できないことが多すぎて、どこに問題があるのか​​わかりません。

現時点では、マップは目的のマーカーを目的の場所にプロットします。mapView:didSelectAnnotationViewコールアウト ボックスのカスタマイズを開始する前に、 andmapView:viewForAnnotation関数を起動する方法を理解する必要があり ます。

これらの機能をトリガーする方法について、段階的な手順を説明している人はいますか?

4

3 に答える 3

9

背景のビット

注意すべき点がいくつかあります。

  1. あなたは電話しませんmapView:didSelectAnnotationView。MKMapView は、デリゲートでその関数を呼び出します。言い換えれば、MKMapView をセットアップするときは、次のように伝えます。その「男」はデリゲート オブジェクトであり、実装する必要がありますmapView:didSelectAnnotationView(これが、その名前が「did select」である理由でもあります。つまり、「select」ではなく、既に発生しています)。単純なケースとして、デリゲートは多くの場合、UIViewControllerMKMapView を所有しています。これについては、以下で説明します。

  2. ユーザーが注釈の 1 つをタップすると、そのメソッドがトリガーされます。そのため、注釈ビューをタップしたときに何が起こるか (たとえば、選択範囲の更新) をカスタマイズするのに最適な場所です。

  3. ただし、どの注釈を表示するかをカスタマイズしたい場合、それはあなたが望むものではありません。それは実際に求めているように聞こえます. そのために、同じマニュアルページのほんの数段落前に別の方法があります: mapView:viewForAnnotation. したがって、探していたものではないことがわかった場合は、この方法に置き換えてmapView:didSelectAnnotationViewください。

できること

マーカー付きのマップまで取得した場合、少なくとも次のものがUIViewControllerあるMKMapViewと思います。mapView

MKMapViewDelegate起動するメソッドは、プロトコルの一部として定義されています。これを配線する最も簡単な方法は次のとおりです。

  • UIViewController を MKMapView のデリゲートにします

    • コードで、あなたviewDidLoadの、あなたMapViewController.mができるmapview.delegate = self、または
    • Interface Builder では、接続を MKMapView デリゲート プロパティからファイルの所有者にドラッグできます。
  • 次に、 UIViewController に というメソッドを定義し、ファイルmapView:didSelectAnnotationViewでプロトコルと同じように宣言します。MapViewController.m

    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
        // whatever you need to do to your annotation and/or map
    }
    

幸運を!

于 2012-05-08T04:30:39.537 に答える
2

mapView:didSelectAnnotationViewマップ ビューのデリゲート メソッドです。ここでそれについて読むことができます: MKMapViewDelegate プロトコル リファレンス

呼び出す必要はありません。マップ ビューはそれを「自分で」呼び出し、デリゲートとして登録されたすべてのビュー/ビュー コントローラーに送信します。

あなたは何する必要があるの

基本的に、.h ファイルに MKMapViewDelegate を追加する必要があります。次のようになります。

@interface someViewController : UIViewController  <MKMapViewDelegate>

次に、.m ファイルで、マップ ビューをインスタンス化した後、次を追加する必要があります。

mapView.delegate = self;//were self refers to your controller

この時点から、コントローラーはマップビューから「メッセージを受信」できるようになります。これは、リンクした MKMapViewDelegate リファレンスで確認できるメソッドです。

したがって、 mapView:didSelectAnnotationView を実装するには、.m ファイルに追加する必要があります

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
     //if you did all the steps this methosd will be called when a user taps the annotation on the map. 
 }

何が起こっている

バックグラウンドで行われることは次のとおりです。

  1. マップ ビューには、AnnotationView タッチ イベントを処理するメソッド (Apple コード) があります。
  2. タッチ イベントが発生すると、すべてのデリゲートに「ユーザーがこのマップで注釈ビューを選択しました。必要な操作を行ってください」という「メッセージ」が送信されます。通常は次のようになります。

     [self.delegate mapView:someMapView didSelectAnnotationView:someAnnotationView];
    
  3. 次に、デリゲートとして自分自身を割り当て、メソッドを実装したすべてのビュー/コントローラーが、このメソッドを呼び出します。

幸運を

于 2012-05-08T04:29:22.063 に答える
0
Place *place = [[Place alloc] init];
PlaceMark *placeMark = [[PlaceMark alloc] initWithPlace:place];
[self.mapView selectAnnotation:placeMark animated:YES];
于 2014-08-04T12:13:25.733 に答える