Ios 添加到mapkit时如何自动选择注释
我有一个地图,我可以添加引脚(注释)在其中的代码。 我想在运行我的应用程序和在我的应用程序中添加注释时自动选择此注释,并在单击地图而不是注释时取消选择注释。 我可以选择和取消选择我的注释,但一定要单击注释直到选择,然后单击地图(另一个地方代替注释),直到取消选择我的注释 我不要这个。我想在运行我的应用程序时自动选择我的注释,只需单击地图上的另一个位置,直到取消选择我的注释 请告诉我这件事。这是我处理选择/取消选择注释的代码:Ios 添加到mapkit时如何自动选择注释,ios,objective-c,annotations,mapkit,mkannotation,Ios,Objective C,Annotations,Mapkit,Mkannotation,我有一个地图,我可以添加引脚(注释)在其中的代码。 我想在运行我的应用程序和在我的应用程序中添加注释时自动选择此注释,并在单击地图而不是注释时取消选择注释。 我可以选择和取消选择我的注释,但一定要单击注释直到选择,然后单击地图(另一个地方代替注释),直到取消选择我的注释 我不要这个。我想在运行我的应用程序时自动选择我的注释,只需单击地图上的另一个位置,直到取消选择我的注释 请告诉我这件事。这是我处理选择/取消选择注释的代码: static NSString* const ANNOTATION_S
static NSString* const ANNOTATION_SELECTED_DESELECTED = @"mapAnnotationSelectedOrDeselected";
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
NSLog(@"2");
NSString *action = (__bridge NSString *)context;
if ([action isEqualToString:ANNOTATION_SELECTED_DESELECTED]) {
BOOL annotationSelected = [[change valueForKey:@"new"] boolValue];
if (annotationSelected) {
NSLog(@"Annotation was selected, do whatever required");
}else {
NSLog(@"Annotation was deselected, do what you must");
}
}
}
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
if ([mapViews.annotations count] > 1) {
for (MKAnnotationView *anAnnotationView in views) {
[anAnnotationView addObserver:self forKeyPath:@"selected" options:NSKeyValueObservingOptionNew context:(__bridge void *)(ANNOTATION_SELECTED_DESELECTED)];
}
}
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = (MKPinAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Prospects"];
if ([annotation isKindOfClass:[MKUserLocation class]]){
return nil; //return nil to use default blue dot view
}
else if(pinView == nil) {
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Prospects"];
pinView.pinColor = MKPinAnnotationColorPurple;
pinView.animatesDrop = YES;
pinView.draggable = NO;
}
return pinView;
}
static NSString*const ANNOTATION\u SELECTED\u DESELECTED=@“mapAnnotationSelectedOrDeselected”;
-(void)observeValueForKeyPath:(NSString*)对象的键路径:(id)对象更改:(NSDictionary*)更改上下文:(void*)上下文{
NSLog(@“2”);
NSString*操作=(u桥NSString*)上下文;
if([操作IsequalString:注释\u已选择\u已取消选择]){
BOOL annotationSelected=[[change valueForKey:@“new”]boolValue];
如果(注释已选定){
NSLog(@“已选择注释,执行任何需要的操作”);
}否则{
NSLog(@“注释被取消选择,执行您必须执行的操作”);
}
}
}
-(void)地图视图:(MKMapView*)地图视图添加注释视图:(NSArray*)视图{
如果([mapViews.annotations count]>1){
用于(MKAnnotationView*视图中的AnnotationView){
[anAnnotationView addObserver:self-forKeyPath:@“selected”选项:NSKeyValueObservingOptionNew-context:(u桥空*)(ANNOTATION_selected_DESELECTED)];
}
}
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{
MKPinAnnotationView*pinView=(MKPinAnnotationView*)[self.mapView dequeuereusableannotationview with identifier:@“Prospects”];
if([annotation isKindOfClass:[MKUserLocation类]]){
return nil;//返回nil以使用默认的蓝点视图
}
else if(pinView==nil){
pinView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:@“Prospects”];
pinView.pinColor=MKPinAnnotationColorPurple;
pinView.animatesDrop=是;
pinView.draggable=否;
}
返回pinView;
}
选择指定的注释并显示其详图索引视图
[mapView selectAnnotation:pinView动画:是]代码>//这里pinView是您的注释,mapview是您的地图
如果指定的注释不在屏幕上,因此没有关联的注释视图,则此方法无效
单击地图上的其他位置,直到取消选择“我的注释”。
这是mapview的默认行为
选择指定的注释并为其显示详图索引视图
[mapView selectAnnotation:pinView动画:是]代码>//这里pinView是您的注释,mapview是您的地图
如果指定的注释不在屏幕上,因此没有关联的注释视图,则此方法无效
单击地图上的其他位置,直到取消选择“我的注释”。
这是mapview的默认行为
使用swift 3的相同解决方案
func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
self.mapView.selectAnnotation(self.mapView.annotations[0], animated: true)
}
与swift 3相同的解决方案
func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
self.mapView.selectAnnotation(self.mapView.annotations[0], animated: true)
}
我得到这个错误:错误:尝试选择一个尚未添加的注释在向地图添加注释后,您需要在[mapView addAnnotation:pinView]之后执行此操作;我得到这个错误:错误:尝试选择一个尚未添加的注释在向地图添加注释后,您需要在[mapView addAnnotation:pinView]之后执行此操作;