получить детали, чтобы показать над аннотацией - PullRequest
0 голосов
/ 10 января 2012

хорошо, у меня нормально появляются мои аннотации, но я не могу понять, как заставить маленькое диалоговое окно появляться над ним.Когда я создаю аннотацию, я делаю это:

Annotation *annot = [[Annotation alloc] init];
annot.coordinate = touchMapCoordinate;
annot.title = @"Location";
annot.subtitle = @"The address";
[self.mapView addAnnotation:annot];

Опять же, это работает, находят, но не показывает маленькое диалоговое окно.

Я понимаю, что я как-то связан сделегат.Я скачал пример кода Apple MapCallouts и не мог понять, как они связались с делегатом по аннотациям.

вот мой класс аннотаций

Annotation.H

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface Annotation : NSObject <MKAnnotation>{
    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
}

@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;

-(id)initWithCoordinate:(CLLocationCoordinate2D) c 
                  title:(NSString *) t
               subtitle:(NSString *) st;

-(void) moveAnnotation: (CLLocationCoordinate2D) newCoordinate;

-(NSString *)subtitle;
-(NSString *)title;



@end

Annotation.m

#import "Annotation.h"

@implementation Annotation

@synthesize coordinate = _coordinate;
@synthesize title = _title;
@synthesize subtitle = _subtitle;



-(id)initWithCoordinate:(CLLocationCoordinate2D)c title:(NSString *)t subtitle:(NSString *)st
{
    coordinate = c;
    self.title = t;
    self.subtitle = st;
    return self;
}

-(void)moveAnnotation:(CLLocationCoordinate2D)newCoordinate
{
    coordinate = newCoordinate;
}

-(NSString *)subtitle {
    return subtitle;
}
-(NSString *)title{
    return title;
}
@end

Вот тот вариант, который я настроил:

-(MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id < MKAnnotation >)annotation
{  
if ([annotation isKindOfClass:[Annotation class]])
{
    static NSString *reuseId = @"customAnn";

    MKAnnotationView *customAnnotationView = [aMapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
    if (customAnnotationView == nil)
    {
        customAnnotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
        UIImage *pinImage = [UIImage imageNamed:@"pin-green.png"];
        [customAnnotationView setImage:pinImage];
        customAnnotationView.canShowCallout = YES;
        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        customAnnotationView.rightCalloutAccessoryView = rightButton;
    }

    customAnnotationView.annotation = annotation;

    return customAnnotationView; 
}

return nil; 
}

Если вам нужна дополнительная информация от меня, дайте мне знать и заранее поблагодарить вас!

1 Ответ

2 голосов
/ 10 января 2012

Вам необходимо реализовать следующий метод MKMapViewDelegate на делегате вашего MKMapView:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation

Убедитесь, что вы вернули MKAnnotationView с включенным canShowCallout.

...