2012-03-26 20 views
2

私はMKMapViewアノテーションオブジェクトを持っています。このオブジェクトには、正しいコールアウトアクセサリ詳細開示ボタンがあります。ボタンが押されると、私はaddTarget:action:forControlEventを使ってセレクタメソッドを呼び出し、詳細viewControllerを作成し、それをビュースタックにプッシュします。詳細開示後の注釈の詳細は押されましたか?

私の質問は、吹き出し詳細コントローラを開始した注釈の情報にアクセスする最もよい方法です。詳細開示ボタンを呼び出すように設定されている:私は誰もが私にどのように任意のポインタを与えることができ、私は送信者UIButtonの親注釈を探すことができると思います

- (void)disclosurePressed:(id)sender { 
} 

をこのようになります

[button addTarget:self action:@selector(disclosurePressed:) forControlEvents:UIControlEventTouchUpInside]; 

これは最善です。

答えて

4

MKMapViewDelegatemapView:annotationView:calloutAccessoryControlTapped:の方法を使用すると、簡単に時間を取ることができます。これは、どのアノテーションビューがタップされたかを直接指示します。

+0

アハ:)ちょうど私が何をしているかのように聞こえる、私はそれを行ってみましょう。 Nevanを高く評価しました。 – fuzzygoat

+0

問題ありません。 MKAnnotationViewの 'annotation'プロパティを使って実際の注釈にアクセスできることを忘れてしまいました。 –

+0

ネバンに感謝して、素敵な一日を。 – fuzzygoat

3

マップビューのselectedAnnotationsプロパティを信頼できる方法(カスタムメソッドを使用する必要がある場合)で確認することです。マップビューは一つだけ注釈を一度に選択することができますので、プロパティは、NSArrayですが

、ユーザーは単にインデックス0になりますタップ1ので、それは次のようになります。

id<MKAnnotation> annTapped = [mapView.selectedAnnotations objectAtIndex:0]; 

//Here, you can cast annTapped to a custom annotation class if needed. 
//Be sure to check what kind of class it is first. 

最初に、安全のためにmapView.selectedAnnotations.countがゼロでないことを確認することもできます。

しかし


addTargetを使用するよりも(nevan王はすでに答えとして)良い方法とカスタム・アクション・メソッドは、注釈を使用してviewパラメータを通じて直接アクセスマップビューのcalloutAccessoryControlTappedデリゲートメソッドを使用することです:

id<MKAnnotation> annTapped = view.annotation; 
+0

もう一度非常に良いアドバイス、アンナありがとう、非常に感謝します。 – fuzzygoat

+0

どうすればこの番号を取得できますか? APIなどから適切なコンテンツを取得するために注釈のID番号を取得する場合など – carbonr

+0

@ carbonr、希望をクリアします。それでも混乱している場合は、[Ask A Question](http://stackoverflow.com/questions/ask)を提案し、問題の詳細を記載してください。 – Anna

関連する問題