2011-09-16 5 views
4

アクセサリボタンをタブするときに、itemIdを渡す必要があります。そのため、詳細ビューに渡すアイテムを識別できます。calloutAccessoryControlTappedにIDを渡す

これまでのところ:

は、注釈を追加します。

for (id row in self.detailItem) { 
    Item *i = (Item *) row; 
    CLLocationCoordinate2D destination; 
    destination.latitude = (double) i.latitude; 
    destination.longitude = (double) i.longitude; 

    //i.itemid 

    MapViewAnnotation *destinationAnnotation = [[MapViewAnnotation alloc] initWithTitle: i.name andCoordinate: destination]; 
    [self.mapView addAnnotation: destinationAnnotation];  
    [destinationAnnotation release]; 
} 

-(void)mapView:(MKMapView *)mapView annotationView:(MKPinAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 
// get annotation details here. 

NSLog(@"%@", control); 
} 
+0

MapViewAnnotationの詳細。私はMapViewAnnotation.h&MapViewAnnotation.mの内容が必要です。 –

答えて

10

追加詳細ビューに渡すアイテムを見つけるアクセサリボタン

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
MKPinAnnotationView *pinAnnotation = nil; 
if(annotation != mapView.userLocation) 
{ 
    static NSString *defaultPinID = @"myPin"; 
    pinAnnotation = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
    if (pinAnnotation == nil) 
     pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; 

    pinAnnotation.canShowCallout = YES; 

    UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    pinAnnotation.rightCalloutAccessoryView = infoButton; 

} 

return pinAnnotation; 
} 

を追加します。 クラスへのプロパティです。

注釈を追加する場合は、 addAnnotation呼び出す前にプロパティを設定し

calloutAccessoryControlTapped

destinationAnnotation.itemid = i.itemid; 
[self.mapView addAnnotation: ... 

、このような注釈の詳細にアクセスする:

MapViewAnnotation *annotationTapped = (MapViewAnnotation *)view.annotation; 
NSLog(@"annotationTapped.itemid = %@", annotationTapped.itemid); 

itemid場合は変更、intになりますNSLogの%@%dになります)

+0

viewForAnnotationメソッドの前に気付かなかったが、ビューが再利用されている場合は注釈を設定する必要があります。だから、そうでなければなりません: 'if(pinAnnotation == nil)... else pinAnnotation.annotation = annotation;'そうでなければ、再利用されたビューを取得するアノテーションが間違ったアノテーションを指しているかもしれません。 – Anna