从Array中创建MKAnnotation引脚,未调用viewForAnnotation方法?

时间:2012-03-22 07:34:33

标签: iphone mkmapview mkannotation

我正在与Google Places API进行互动,我正在尝试获取餐馆坐标列表,并将其作为图钉显示在mapView中。我也想为它创建一个标注。

到目前为止我所做的是:获取位置的经度和纬度(以及名称和地址),将它们存储在数组中,然后我

[self.nearmapView addAnnotations:self.AnnoArray];

MapView将引脚显示为红色,尽管在我的下面的方法中我把它作为绿色。

- (MKAnnotationView *)mapView:(MKMapView *)theMapView 
        viewForAnnotation:(id <MKAnnotation>)annotation 
{
    customPinView.pinColor = MKPinAnnotationColorGreen;
}

当我评论上述方法时,它甚至更疯狂了,mapView仍然可以生成注释引脚(因此根本没有调用上面的方法)。

我该如何解决这个问题?

有没有人知道如何使用storyboard与segue建立注释?

1 个答案:

答案 0 :(得分:2)

如果你没有实现mapView:viewForAnnotation:,或者由于某种原因它没有被调用,你会得到默认的红色引脚视图。

您可以通过在顶部粘贴mapView:viewForAnnotation:或设置断点来确保调用NSLog。如果您发现它不是,您可能无法挂钩您的代表。有不止一种方法可以做到这一点,但通常是这样做的:

  1. 管理地图视图的视图控制器声明符合MKMapViewDelegate协议:@interface MyViewController : UIViewController <MKMapViewDelegate>
  2. 该视图控制器被设置为地图视图的委托(例如self.mapView.delegate = self中的viewDidLoad,假设您有一个指向地图视图的属性mapView
  3. 该视图控制器实现mapView:viewForAnnotation:
  4. 如果您在没有步骤1和2的情况下执行第3步,则永远不会调用mapView:viewForAnnotation:

    如果你发布的mapView:viewForAnnotation:是整个实现而不是摘录,我可以看到它为什么不起作用 - 你没有返回你设置的MKAnnotationView实例颜色。您需要返回一个实际视图,它需要是每个不同注释的新实例。

    至于故事板 - 显然你的注释在IB中是不可见的,所以你不能从它们中拖出segues。而是从视图控制器本身(管理地图视图的那个)拖动一个segue,并为其指定一个标识符。然后,当点击注释的按钮(调用委托方法mapView:annotationView:calloutAccessoryControlTapped:)时,您的视图控制器可以调用[self performSegueWithIdentifier:@"yourIdentifier"]来实现它。 (此时您无法访问segue的目标视图控制器,因此您无法根据点击的注释来配置它。但您可以记住它是哪个注释,然后在prepareForSegue:sender:中使用它。 )