2016-03-07 20 views
1

我有幾個註釋點。我想要做的是當我點擊一個註釋點,我想要顯示該數據。我有一個帶有標題和NSDictionary的自定義Annotation類。該字典包含圖片網址和ID。我想在點擊特定註釋時獲取這些內容。單擊註釋時如何訪問可用數據?

編輯:我知道didSelectAnnotation,但我如何訪問數據?

-(void)annotations{ 
    CLLocationCoordinate2D pinPoint; 
    for (NSDictionary * dict in _dataArray) { 
     pinPoint.latitude =[[dict valueForKey:@"lat"] doubleValue]; 
     pinPoint.longitude = [[dict valueForKey:@"lng"] doubleValue]; 
     _myAnnotation = [[MapViewAnnotation alloc]initWithTitle:[dict valueForKey:@"name"]andCoordinate:pinPoint andData:dict]; 

     MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:pinPoint addressDictionary:nil] ; 
     _destination = [[MKMapItem alloc] initWithPlacemark:placemark]; 
     _myAnnotation.title=[dict valueForKey:@"name"]; 

     [self.mapKit addAnnotation:_myAnnotation]; 
    } 

} 

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800); 
    [self.mapKit setRegion:[self.mapKit regionThatFits:region] animated:YES]; 




} 

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(MapViewAnnotation*)annotation 
{ 
    // If it's the user location, just return nil. 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; 

    // Handle any custom annotations. 
    if ([annotation isKindOfClass:[MapViewAnnotation class]]) 
    { 
     // Try to dequeue an existing pin view first. 
     MKAnnotationView *pinView = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"]; 
     if (!pinView) 
     { 
      // If an existing pin view was not available, create one. 
      pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"]; 
      pinView.canShowCallout = YES; 
      NSLog(@"%@",[annotation.data valueForKey:@"name"]); 
      pinView.image = [UIImage imageNamed:@"image"]; 
      pinView.calloutOffset = CGPointMake(0, 32); 
      UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
      pinView.rightCalloutAccessoryView = rightButton; 
     } else { 
      pinView.annotation = annotation; 
     } 
     return pinView; 
    } 
    return nil; 
} 


-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 
    MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init]; 
    [request setTransportType:MKDirectionsTransportTypeWalking]; 
    request.source = [MKMapItem mapItemForCurrentLocation]; 
    request.destination = _destination; 
    request.requestsAlternateRoutes = NO; 
    MKDirections *directions = 
    [[MKDirections alloc] initWithRequest:request]; 

    [directions calculateDirectionsWithCompletionHandler: 
    ^(MKDirectionsResponse *response, NSError *error) { 
     if (error) { 
      // Handle Error 
     } else { 
      [self showRoute:response]; 
     } 
    }]; 
} 

編輯第二:

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{  
    MapViewAnnotation * annotation = (MapViewAnnotation *) view; 
    NSLog(@"%@",[annotation.data valueForKey:@"name"]); 
    NSURL *url =[NSURL URLWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"SPOTTD_profilePic"]]; 
    NSData *imageData = [NSData dataWithContentsOfURL:url]; 
    _imgMyProfile.image = [UIImage imageWithData:imageData]; 

} 

回答

1

您可以用MKAnnotationViewannotation財產使用didSelectAnnotationView方法,結合:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
    if ([view.annotation isKindOfClass:[MapViewAnnotation class]]) { 
      MapViewAnnotation *annotation = (MapViewAnnotation)view.annotation; 
    } 
} 

你已經安全投放到您的自定義類型的註釋後,您可以訪問像NSDictionary其屬性。

+0

即時通訊錯誤[MKAnnotationView數據]:無法識別的選擇器發送到實例0x7fae1d5f1020 這裏的數據是我的NSDictionary在自定義註釋類 –

+0

在你的代碼行?我沒有看到在任何地方調用「數據」方法... – Glorfindel

+0

數據是MapViewAnnotation的屬性嗎?如果是這樣,請嘗試'myAnnotation.data'。 – Glorfindel

0
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
NSString *latPoint2 = [NSString stringWithFormat:@"%.6f", view.annotation.coordinate.latitude]; 
NSString *longPoint2 =[NSString stringWithFormat:@"%.6f", view.annotation.coordinate.longitude]; 
0

沒有爲註釋多了一個方法,它是 - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {}。在這個方法您就可以在annotation.Hope的點擊,這將幫助您的數據。如果有任何查詢讓我知道。由於

相關問題