2011-09-16 5 views
4

액세서리 버튼을 탭 할 때 itemId를 전달해야하므로 세부 뷰로 전달할 항목을 식별 할 수 있습니다.calloutAccessoryControlTapped에 패스 아이디

지금까지 :

은 주석을 추가

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의 세부 정보. –

답변

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; 
} 

추가 itemid 속성은 MapViewAnnotation 클래스에 있습니다.

주석을 추가 할 때, 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 메서드에서 전에는 알지 못했지만 뷰를 다시 사용하는 경우 주석을 설정해야합니다. MapViewAnnotation.h & MapViewAnnotation.m의 내용이 필요합니다. 따라서 : if (pinAnnotation == nil) ... else pinAnnotation.annotation = annotation; 그렇지 않으면, 재사용 뷰를 얻는 주석이 잘못된 주석을 가리킬 수 있습니다. – Anna