请帮助我,我坚持这个MapView
:
我在MapView
下有一个MapView
和一个小标签。在MapView
上,我有很多引脚(MKPinAnnotationView
),我知道如何使用数组设置每个引脚的标题和副标题,但我不知道如何区分每个引脚。我的意思是当用户点击一个引脚时,标签将显示敲击引脚的标题。
以下是我的一些代码:
这是我定义引脚的地方:
@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;
}
答案 0 :(得分: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];
}
答案 1 :(得分: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;
}
}
我希望这段代码可以帮到你。