как выполнить событие, относящееся к определенной MKAnnotation - PullRequest
0 голосов
/ 24 ноября 2010

У меня есть карта, которая имеет несколько сотен MKPointAnnotations и была настроена на наличие аксессуара для левой и правой выноски, проблема, с которой я сталкиваюсь, - это найти способ выполнить действие, специфичное для этой аннотации

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

    @synthesize coordinate;
@synthesize _title;
@synthesize _date;
@synthesize _description;
@synthesize _coordinates;

- (CLLocationCoordinate2D)coordinate;{
    CLLocationCoordinate2D theCoordinate;
    theCoordinate.latitude = _coordinates.latitude;
    theCoordinate.longitude = _coordinates.longitude;
    return theCoordinate; 
}

- (NSString *)title {
 return _title;
}

- (NSString *)subtitle {
 return _description;
}

- (void)dealloc {
 [super dealloc];
 [_description release];
 [_date release];
 [_title release];
}

Может кто-нибудь помочь мне с этим, пожалуйста: D

1 Ответ

3 голосов
/ 24 ноября 2010

Давайте рассмотрим имя класса, который указан выше в вашем коде: annotation.m

По вашему мнению, контроллер

annotation  *annotationObject=[[annotation alloc]init];
annotationObject.title=@"Some title";
annotationObject.subTitle=@"Some subtitle";
annotationObject.coordinate=someCoordinate;
[mapView addAnnotation:annotationObject];
[annotationObject release];

Поместите приведенный выше код в цикл для добавления множества аннотаций или поместите объекты аннотаций в массив и используйте addAnnotations для mapView.

В viewForAnnotation добавьте дополнительную кнопку к аннотации

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
 MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"] autorelease];
    annotationView.canShowCallout = YES;
    UIButton *annotationButton=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    annotationView.rightCalloutAccessoryView = annotationButton;
    return annotationView;
}

Когда пользователь выбирает вспомогательную кнопку, этот делегат будет называться

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
     //Get the specific annotation by the view.annotation.title 
     //Go to another view that has details
}
...