2012-02-25 6 views
0

MKAnnotationプロトコルに準拠する注釈クラスがあります。クラスには、座標、タイトル、およびサブタイトルを設定するinitメソッドがあります。MKPinAnnotationViewコールアウトボタンはカスタムオブジェクトをDetails ViewControllerに渡す必要があります

私は、これらのアノテーションの配列を作成し、addAnnotations:annotationArrayを使用してMKMapViewに通常の方法を追加します。

次に、MKMapViewDelegageメソッド- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotationで、カスタムピンカラーanimatesDrop、canShowCalloutを使用してMKPinAnnotationViewを作成します。コールアウトにはタイプUIButtonTypeDetailDisclosureのUIButtonがあります。

私は、アプリケーションを実行し、地図上のピンをクリックすると、私は、タイトル、サブタイトル、およびdetailDisclosureボタンと吹き出しで期待される結果が得られます。

私が把握しようとしている事は、ユーザが、詳細開示ボタンをクリックすると詳細ページ([self.navigationController pushViewController:detailsController animated:YES];)にデータを渡す方法です。私は、追加のパラメータをinitメソッドに追加することでアノテーションクラスを変更しようとしましたが、- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)controlメソッドでそのパラメータにアクセスすることはできません。このようなことをして、タイトルとサブタイトルにアクセスできるのは、[view.annotation title]のようです。

私はここで何をすべきかわからないんだけど、私は再び...どちらか

をこれを行う方法上の任意のドキュメントを見つけるように見えることはできません。詳細ビューコントローラにオブジェクトを渡したいと思います。オブジェクトには詳細ページで使用されるさまざまなデータが含まれています...

PS - 私はXcode 4.2 w/ARCを使用しています。

答えて

3

calloutAccessoryControlTappedには、作成して追加した正確な注釈オブジェクトがありますが、参照は総称してid<MKAnnotation>と入力されています。あなたのアノテーションクラスのカスタムプロパティにアクセスするには

、それを最初にキャストすることができます:

YourAnnotationClass *myAnn = (YourAnnotationClass *)view.annotation; 

//now you can explicitly reference your custom properties... 
NSLog(@"myAnn.customProp = %@", myAnn.customProp); 

は「customPropが」あなたのアノテーションクラスのプロパティとして定義されていることを確認します。

+2

ええ、最初に 'myAnn'のクラスタイプを確認してください。ユーザーが「現在地」の注釈をタップすると、このメッセージも表示されます。クラスの1つであると仮定している場合は、実装されていない例外が発生します。 – Steve

+0

アンナありがとう、これは美しく働いた!また、現在の場所の問題を指摘してくれたSteveに感謝します。私はこのエラーを防ぐためにいくつかの追加コードを実装しました。if([myMapAnnotation isKindOfClass:[MyMapAnnotation class]]) ' – ElasticThoughts

+0

@ Steve、Good point、ありがとう。 – Anna

関連する問題