1

请帮助我,我坚持这个MapView

我在MapView它下面有一个和一个小标签MapView。上MapView,我有很多引脚(MKPinAnnotationView),我知道如何使用数组设置每个引脚的标题和副标题,但我不知道如何区分每个引脚。我的意思是当用户点击 pin 时,标签将显示被点击 pin 的标题。

这是我的一些代码:

这是我定义引脚的地方:

@implementation PlacePin

@synthesize coordinate,title,subtitle;
@synthesize nTag;

- (id)initWithLocation:(CLLocationCoordinate2D)coord{   

    self = [super init];    
    if (self) {         
        coordinate = coord;     
    }
    return self;    
}

-(void)dealloc{
    [title release];
    [subtitle release];
    [super dealloc];
}
@end

这是我从服务器处理结果的地方:

- (void) resultCheck {

NSString *strUrl    = [NSString stringWithFormat:@"ServerAddress.com"];

NSLog(@"MapView - resultCheck: url: %@ ", strUrl);
NSURL *url          = [ NSURL URLWithString:strUrl];

//get the result from server
NSString *result    = [NSString stringWithContentsOfURL:url];

NSLog(@"MapView - resultCheck: result: %@", result);


NSDictionary *dictionary = [result JSONValue];
NSLog(@"MapView - resultCheck: dictionary: %@", dictionary);





//process the JSON, get two parameters: xPos, yPos 
NSDictionary *value1 = [dictionary valueForKey:@"result"];
NSDictionary *value2 = [value1 valueForKey:@"post"];



NSArray *arrXPos    = [value2 valueForKey:@"xPos"];         //array of xPos
NSArray *arrYPos    = [value2 valueForKey:@"yPos"];         //array of yPos
self.arrName        = [value2 valueForKey:@"name"];         //array of name
self.arrPlaceInfor  = [value2 valueForKey:@"place_info"];



NSLog(@"MapView - resultCheck: value1: %@",value1);
NSLog(@"MapView - resultCheck: value2: %@",value2);
NSLog(@"MapView - resultCheck: value3: %@",arrXPos);
NSLog(@"MapView - resultCheck: value4: %@",arrYPos);



//get the xPos and yPos 
for (int i = 0 ; i < [value2 count]; i++) {

    //display the place depended on the xPos and yPos

    CLLocationCoordinate2D location; 

    location.latitude   = [[ NSString stringWithFormat:@"%@",[arrXPos objectAtIndex:i]] doubleValue];
    location.longitude  = [[ NSString stringWithFormat:@"%@",[arrYPos objectAtIndex:i]] doubleValue];


    PlacePin *mapPoint  = [[PlacePin alloc] initWithLocation:location];
    //set the title and subtitle of the pin depending on the result from server
    mapPoint.title      = [ NSString stringWithFormat:@"%@",[self.arrName objectAtIndex:i]];
    mapPoint.subtitle   = [ NSString stringWithFormat:@"%@",[self.arrPlaceInfor objectAtIndex:i]];

    [mapView addAnnotation:mapPoint];
    [mapPoint release];


    mapPoint = nil;



}

}

这是我处理引脚并设置标签的地方 - 我被卡住了:(

    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view NS_AVAILABLE(NA, 4_0){

    self.labelShortIntro.text = @"1111111111111";


}

//customize an annotation
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{

    MKPinAnnotationView *annView    = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];
    annView.pinColor                = MKPinAnnotationColorPurple;
    annView.animatesDrop            = TRUE;
    annView.canShowCallout          = YES;
    annView.calloutOffset           = CGPointMake(-5, 5);
    return annView;
}
4

2 回答 2

1
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{

    PlacePin *selectedPin       =     view.annotation;

    NSLog(@"Title = %@ Subtitle = %@",selectedPin.title,selectedPin.subtitle);

    self.labelShortIntro.text   =     [NSString stringWithFormat:@"Title = %@ Subtitle = %@",selectedPin.title,selectedPin.subtitle];

}
于 2012-07-13T06:21:10.533 回答
0

didSelectAnnotationView委托中:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    NSArray *selectedAnnotations = mapView.selectedAnnotations;

    for(PlacePin *ann in selectedAnnotations)
    {
        NSLog(@"%@",ann.title);
        self.labelShortIntro.text=ann.title;
    }
}

我希望这段代码对你有帮助。

于 2012-07-13T05:58:07.820 回答