我正在编写一个在iOS中使用mapView的应用程序。 我试图将可变数组中的注释着色为紫色,并为每个引脚添加一个公开按钮。 我使用可变数组的原因是我将从数据库中检索许多地方以使用引脚查看地图上的每个地方。
我的代码是:
- (void)viewDidLoad{
[super viewDidLoad];
// Do any additional setup after loading the view.
//code of map
[mapMKMapView setMapType:MKMapTypeStandard];
[mapMKMapView setZoomEnabled:YES];
[mapMKMapView setScrollEnabled:YES];
MKCoordinateRegion newRegion = { {0.0, 0.0},{0.0, 0.0}};
newRegion.center.latitude = 12.968427;
newRegion.center.longitude = 44.997704;
newRegion.span.latitudeDelta = 0.004731;
newRegion.span.longitudeDelta = 0.006952;
[self.mapMKMapView setRegion:newRegion animated:YES];
//multiple annotations
NSMutableArray *locations = [[NSMutableArray alloc] init ];
CLLocationCoordinate2D loc;
annotationClass *myAnn;
//1st annotation
myAnn = [[annotationClass alloc] init];
loc.latitude = 12.968427;
loc.longitude = 44.997704;
myAnn.coordinate = loc;
myAnn.title = @"Nakheel2";
myAnn.subtitle = @"This Al-Nakheel 2 stage";
[locations addObject:myAnn];
//2nd annotaion
myAnn = [[annotationClass alloc] init];
loc.latitude = 12.971532;
loc.longitude = 44.998015;
myAnn.coordinate = loc;
myAnn.title = @"Nakheel21";
myAnn.subtitle = @"This Al-Nakheel 2 stage Hi";
[locations addObject:myAnn];
[self.mapMKMapView addAnnotations:locations];
}
//******
-(MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)locations
{
MKPinAnnotationView *MyPin=[[MKPinAnnotationView alloc] initWithAnnotation:locations reuseIdentifier:@"current"];
MyPin.pinColor = MKPinAnnotationColorPurple;
UIButton *adverButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[adverButton addTarget:self action:@selector(button:) forControlEvents:UIControlEventTouchUpInside];
MyPin.rightCalloutAccessoryView = adverButton;
MyPin.draggable = NO;
MyPin.highlighted = YES;
MyPin.animatesDrop = TRUE;
MyPin.canShowCallout = YES;
return MyPin;
}
答案 0 :(得分:0)
viewForAnnotation
委托方法将由地图视图自动调用(您没有明确地“运行”它)。
地图视图未调用它的最可能原因是地图视图的delegate
未设置。
在storyboard或xib中,确保地图视图的delegate
插座已连接到视图控制器(右键单击或按住Ctrl键单击地图视图并将代理插座连接到视图控制器)。
或者,您可以在viewDidLoad
之前的setMapType
代码中添加此行:
//code of map
mapMKMapView.delegate = self; // <-- add this line
[mapMKMapView setMapType:MKMapTypeStandard];
一个不相关的观点:
我建议使用地图视图自己的calloutAccessoryControlTapped
委托方法,而不是使用按钮的自定义操作方法。在该方法中,您将直接访问被轻击的注释对象(通过view.annotation
)。如果您决定使用委托方法,请删除addTarget
和button:
方法。