Как я могу получить аннотацию UIButtonTypeDetailDisclosure, выбранную в задаче c? - PullRequest
2 голосов
/ 09 февраля 2012

Я хочу сделать детальный просмотр, когда нажимаю кнопку детализации аннотации.Но каждый штифт должен иметь разный детальный вид.Для этого я пытаюсь установить тэг на кнопки.И затем я буду использовать эти теги в методе calloutAccessoryControlTapped для добавления их подробного представления.Мой код ниже.Но это останавливается на для цикла.Как я могу решить это?

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
static NSString *annReuseId = @"test";

MKPinAnnotationView *annView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annReuseId];
if (annView == nil)
{
    annView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annReuseId];

    annView.animatesDrop = YES;
    annView.canShowCallout = YES;
    [annView setSelected:YES];
    UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    annView.rightCalloutAccessoryView=detailButton;
    for (int i=0; i<=[[mapView annotations] count]; i++)
    {
        detailButton.tag =[[[mapView annotations] objectAtIndex: i] integerValue];
        NSLog(@"button %i",detailButton.tag);

    }
}
else {
    annView.annotation = annotation;

}

return annView;
}
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{


NSLog(@"calloutAccessoryControlTapped: annotation = %@", view.annotation);
RestaurantsView *detailView=[[RestaurantsView alloc] initWithNibName:@"RestaurantsView" bundle:nil];
   //here, can set annotation info in some property of detailView
   // [[self navigationController] pushViewController:detailView animated:YES];
   // [detailView release];
[self.view addSubview:detailView.view];
}

1 Ответ

2 голосов
/ 09 февраля 2012

Вам не нужно устанавливать tag кнопки детализации.Вы можете удалить весь цикл for в viewForAnnotation:.Если вы хотите получить доступ к аннотации внутри calloutAccessoryControlTapped:, просто используйте view.annotation, как вы делали с NSLog(@"calloutAccessoryControlTapped: annotation = %@", view.annotation);.

Если вам действительно нужен индекс, используйте [mapView.annotations indexOfObject:view.annotation], но будьте осторожны, так как этот массивтакже включают все другие виды аннотаций, такие как MKUserLocation.

...