Как можно обратиться к кнопке на annotationView, чтобы выполнить действие в iphone? - PullRequest
0 голосов
/ 22 ноября 2011

Я хочу добавить кнопку в annotationView в mapkit в iphone для выполнения действия по нажатию этой кнопки. Как я могу выполнить действие при нажатии на эту кнопку? я также не могу добавить кнопку в виде аннотации, используя следующий код:

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

        pinView.pinColor = MKPinAnnotationColorRed; 
        pinView.canShowCallout = YES;
        pinView.animatesDrop = YES;

        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [infoButton addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
        pinView.rightCalloutAccessoryView = infoButton;

    } 
    else {
        [mapView.userLocation setTitle:@"I am here"];
    }
    return pinView;
}

Может кто-нибудь сказать мне, как я могу добавить кнопку к представлению аннотации синей точки по умолчанию для пользователя? Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 22 ноября 2011

Я использовал

- (void)mapView:(MKMapView *)eMapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

для захвата кнопки нажмите.

И я создал кнопку так:

UIButton *detailButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
detailButton.frame = CGRectMake(0, 0, 44, 44);
detailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
detailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
annotationView.rightCalloutAccessoryView = detailButton;

в

-(MKAnnotationView *)mapView:(MKMapView *)mv viewForAnnotation: (id<MKAnnotation>)annotation
1 голос
/ 22 ноября 2011

Просто посмотрите на мой пример кода:

- (MKAnnotationView *)mapView:(MKMapView *)mapView1 viewForAnnotation:(id <MKAnnotation>)annotation
{   
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    TagMark * tempMark = (TagMark *) annotation;

    MKPinAnnotationView *dropPin=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"venues"];

    dropPin.animatesDrop = YES;
    dropPin.canShowCallout = YES;

    UIButton *pinButton = [UIButton buttonWithType:UIButtonTypeCustom];
    pinButton.frame = CGRectMake(2, 2, 28, 29);
    [pinButton setImage:[UIImage imageNamed:@"ph.png"] forState:UIControlStateNormal];
    pinButton.tag = [[tempMark useID] intValue];
    [pinButton addTarget:self action:@selector(makeCall:) forControlEvents:UIControlEventTouchUpInside];

    dropPin.rightCalloutAccessoryView=pinButton; 

    return dropPin;
}

Надеюсь, это поможет вам ...

0 голосов
/ 16 декабря 2011

Для добавления кнопки в annotationView синей точки по умолчанию используйте метод делегата и добавьте туда кнопку следующим образом:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
if (!view.rightCalloutAccessoryView) {

    UIButton *detailButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
    view.rightCalloutAccessoryView = detailButton;

    detailButton.frame = CGRectMake(0, 0, 44, 44);
    detailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
    detailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

 }
}
...