несколько аннотаций Mapkit с showdetails, как мне загрузить детали для каждой аннотации? - PullRequest
1 голос
/ 09 марта 2011

Моя карта работает нормально с несколькими аннотациями в NSMuttableArray, MyAnnotations отображаются нормально с заголовком и подзаголовком и правой кнопкой вызова, связанной с представлением с действием @selector showDetails.Однако, как мне загрузить детали для каждой аннотации в это представление?то есть, если кто-то нажимает на Эмпайр Стейт Билдинг, он отображает информацию о себе в этом представлении, а кто-то нажимает на Крайслер, строящий его, а также отображает сведения о себе в этом представлении.Выясните, вот фрагмент моего rootviewcontroller.m

, если это помогает, все мои аннотации названы так и так далее и так далее

[mapView addAnnotation:myAnnotation1];
[mapView addAnnotation:myAnnotation2];
[mapView addAnnotation:myAnnotation3];
[mapView addAnnotation:myAnnotation4];

с соответствующими

MyAnnotation* myAnnotation1=[[MyAnnotation alloc] init];

myAnnotation1.coordinate=theCoordinate1;
myAnnotation1.title=@"Asda";
myAnnotation1.subtitle=@"Kimberley Way, TN240SE";



- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    NSLog(@"welcome into the map view annotation");

    // if it's the user location, just return nil.
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    // try to dequeue an existing pin view first
    static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
    MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc]
                                     initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
    pinView.animatesDrop=YES;
    pinView.canShowCallout=YES;
    pinView.pinColor=MKPinAnnotationColorPurple;

    //differnt colored pins based on title name

    if ([[annotation title] isEqualToString:@"Asda"])

        pinView.pinColor = MKPinAnnotationColorRed;

    else if ([[annotation title] isEqualToString:@"Ashford Football Club"])

        pinView.pinColor = MKPinAnnotationColorGreen;

    UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [rightButton setTitle:annotation.title forState:UIControlStateNormal];
    [rightButton addTarget:self
                    action:@selector(showDetails:)
          forControlEvents:UIControlEventTouchUpInside];
    pinView.rightCalloutAccessoryView = rightButton;



    UIImageView *profileIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"profile.png"]];
    pinView.leftCalloutAccessoryView = profileIconView;
    [profileIconView release];

    return pinView;
}


-(IBAction)showDetails:(id)sender{

    NSLog(@"Annotation Click");
    self.userProfileVC.title=((UIButton*)sender).currentTitle;
    [self.navigationController pushViewController:self.userProfileVC animated:YES];
}
- (void)dealloc {
    [super dealloc];
}


@end

Ответы [ 3 ]

1 голос
/ 09 марта 2011

Согласно документации , делегат вашей карты должен получить сообщение mapView:annotationView:calloutAccessoryControlTapped: при нажатии кнопки. Это передает вам экземпляр MKAnnotationView, к которому был подключен, который имеет свойство annotation, чтобы дать вам соответствующую аннотацию. Вы должны использовать это вместо того, чтобы пытаться использовать действие для кнопки напрямую.

0 голосов
/ 17 марта 2011

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

-(IBAction)showDetails:(id)sender{

    NSLog(@"Annotation Click");
    self.userProfileVC.title=((UIButton*)sender).currentTitle;
    if([((UIButton*)sender).currentTitle isEqualToString:@"Asda"])
        self.userProfileVC.label.text= @"Glass, Paper, Cans, Textiles, Card, Shoes and Books";
0 голосов
/ 09 марта 2011

Вы можете сделать это так.

CLLocationCoordinate2D location = [self addressLocation:address];
region.span=span;
region.center=location;
Annotation *addAnno= [[Annotation alloc] initWithCoordinate:location title:address subtitle:subaddres];
[annotations addObject:addAnno];

Поэтому в аннотации у вас были делегированные заголовок метода и заголовок субтитра (NSSTring) {, с помощью этого вы можете получить свой заголовок и субтитр, когда щелкнете соответствующую аннотацию.

в аннотации

  -(id)initWithCoordinate:(CLLocationCoordinate2D)c title:(NSString*)tit subtitle:(NSString*)sub{

 mTitle=tit;


mSubTitle=sub;

return self;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...