Показать левый и правый выноски в виде карты, используя набор карт

У меня есть простая проблема, на которую я не могу найти ответ. Я извлекаю длинный и последний список местоположений из списка и помещаю их в вид карты. эта часть работает просто отлично. покажите булавки и покажите также заголовок и подзаголовок (снова из plist). Вот код, который для моего представления контроллера.h класс:

#import "ViewController.h"
#import "Annotation.h"

@interface ViewController ()

@end


#define WIMB_LATITUDE 51.434783;
#define WIMB_LONGITUDE -0.213428;


#define ARSENAL_LATITUDE 51.556899;
#define ARSENAL_LONGITUDE -0.106403;

#define CHELSEA_LATITUDE 51.481314;
#define CHELSEA_LONGITUDE -0.190129;


#define THE_SPAN 0.10f;

@implementation ViewController
@synthesize myMapView;

- (void)viewDidLoad
{
[super viewDidLoad];

MKCoordinateRegion myRegion;
CLLocationCoordinate2D center;
center.latitude = ARSENAL_LATITUDE;
center.longitude = ARSENAL_LONGITUDE;
MKCoordinateSpan span;
span.latitudeDelta = THE_SPAN;
span.longitudeDelta = THE_SPAN;
myRegion.center = center;
myRegion.span=span;
[myMapView setRegion:myRegion animated:YES];

NSMutableArray *annotations = [[NSMutableArray alloc]init];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Stadiums" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSArray *anns = [dict objectForKey:@"Stadiums"];
NSLog(@"read1");

for(int i = 0; i < [anns count]; i++) {
    NSLog(@"read2");
    float realLatitude = [[[anns objectAtIndex:i] objectForKey:@"Latitude"] floatValue];
    float realLongitude = [[[anns objectAtIndex:i] objectForKey:@"Longitude"] floatValue];
    NSLog(@"read3");

    Annotation *myAnnotation = [[Annotation alloc] init];
    CLLocationCoordinate2D theCoordinate;
    theCoordinate.latitude = realLatitude;
    theCoordinate.longitude = realLongitude;
    myAnnotation.coordinate = theCoordinate;
    myAnnotation.title = [[anns objectAtIndex:i] objectForKey:@"Title"];
    myAnnotation.subtitle = [[anns objectAtIndex:i] objectForKey:@"Subtitle"];
    [myMapView addAnnotation:myAnnotation];
    [annotations addObject:myAnnotation];
    //[myAnnotation release];
}

}

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

MKAnnotationView *annotationView = (MKAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

if (annotationView == nil)
{
    annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
}

UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
annotationView.rightCalloutAccessoryView = rightButton;

UIImageView *IconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toilets.png"]];
annotationView.leftCalloutAccessoryView = IconView;

annotationView.canShowCallout = YES;
annotationView.annotation = annotation;
return annotationView;
}


- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

моя проблема в том, что левый и правый выносные аксессуары никогда не вызывают. при нажатии на булавку я просто получаю название и подзаголовок. Я пробовал так много разных способов, но не могу решить эту проблему. Может ли кто-нибудь, пожалуйста, помогите мне восстановить этот код, чтобы я мог показать аксессуары.

бесконечно благодарен

PS Я использую iOS 6 и раскадровку, и проект основан только на iphone.

3 ответа

Решение

Ах, понял. поскольку Анна была права в ее подсказке о делегате, не установленном. я неправильно настраивал делегата. все, что мне нужно было сделать, это добавить к моему представлению заголовка контроллера представления вместо того, чтобы пытаться ввести его в моем представлении аннотации, а затем вызвать делегата в представлении контроллера представления, которое загрузило метод self, например: myMapView.delegate = self; код работал все время, но из-за отсутствующего делегата мой взгляд на аннотацию не был уволен. еще раз спасибо Анне Каренниной за подсказку.

Вы должны реализовать левый и правый выноски в – mapView:didSelectAnnotationView: метод делегата. Итак, ваш код

annotationView.leftCalloutAccessoryView = IconView;

annotationView.canShowCallout = YES; Должен пойти в вышеупомянутом методе. Попробуйте вызвать аннотации по умолчанию. Вы все поймете.

Надеюсь это поможет.:)

Я думаю, что вам нужно реализовать следующий метод:

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
Другие вопросы по тегам