2012-02-25 40 views
0

我有一個符合MKAnnotation協議的註釋類。該類有一個設置座標,標題和副標題的init方法。MKPinAnnotationView標註按鈕應將自定義對象傳遞給Details ViewController

我使用addAnnotations:annotationArray創建一個這些註釋的數組,並將它們添加到MKMapView,這是一種正常的方式。

然後在MKMapViewDelegage方法- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation中,我創建了一個MKPinAnnotationView,它具有自定義的針顏色animatesDrop canShowCallout。標註有一個類型爲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類的類型。如果用戶點擊「當前位置」註釋,你也會得到這個消息 - 如果你假設它是你的一個類,它將會破壞一個沒有實現的方法異常。 – Steve 2012-02-25 23:25:11

+0

謝謝安娜,這工作很好!還要感謝您史蒂夫指出當前位置問題。我已經實現了一些額外的代碼來防止這個錯誤'if([myMapAnnotation isKindOfClass:[MyMapAnnotation class]])' – ElasticThoughts 2012-02-25 23:43:49

+0

@Steve,好點,謝謝。 – Anna 2012-02-26 02:27:24

相關問題