我正在与Google Places API进行互动,我正在尝试获取餐馆坐标列表,并将其作为图钉显示在mapView中。我也想为它创建一个标注。
到目前为止我所做的是:获取位置的经度和纬度(以及名称和地址),将它们存储在数组中,然后我
[self.nearmapView addAnnotations:self.AnnoArray];
MapView将引脚显示为红色,尽管在我的下面的方法中我把它作为绿色。
- (MKAnnotationView *)mapView:(MKMapView *)theMapView
viewForAnnotation:(id <MKAnnotation>)annotation
{
customPinView.pinColor = MKPinAnnotationColorGreen;
}
当我评论上述方法时,它甚至更疯狂了,mapView仍然可以生成注释引脚(因此根本没有调用上面的方法)。
我该如何解决这个问题?
有没有人知道如何使用storyboard与segue建立注释?
答案 0 :(得分:2)
如果你没有实现mapView:viewForAnnotation:
,或者由于某种原因它没有被调用,你会得到默认的红色引脚视图。
您可以通过在顶部粘贴mapView:viewForAnnotation:
或设置断点来确保调用NSLog
。如果您发现它不是,您可能无法挂钩您的代表。有不止一种方法可以做到这一点,但通常是这样做的:
MKMapViewDelegate
协议:@interface MyViewController : UIViewController <MKMapViewDelegate>
self.mapView.delegate = self
中的viewDidLoad
,假设您有一个指向地图视图的属性mapView
。mapView:viewForAnnotation:
。如果您在没有步骤1和2的情况下执行第3步,则永远不会调用mapView:viewForAnnotation:
。
如果你发布的mapView:viewForAnnotation:
是整个实现而不是摘录,我可以看到它为什么不起作用 - 你没有返回你设置的MKAnnotationView
实例颜色。您需要返回一个实际视图,它需要是每个不同注释的新实例。
至于故事板 - 显然你的注释在IB中是不可见的,所以你不能从它们中拖出segues。而是从视图控制器本身(管理地图视图的那个)拖动一个segue,并为其指定一个标识符。然后,当点击注释的按钮(调用委托方法mapView:annotationView:calloutAccessoryControlTapped:
)时,您的视图控制器可以调用[self performSegueWithIdentifier:@"yourIdentifier"]
来实现它。 (此时您无法访问segue的目标视图控制器,因此您无法根据点击的注释来配置它。但您可以记住它是哪个注释,然后在prepareForSegue:sender:
中使用它。 )