2013-05-18 29 views
0

我正面临有关MKMapView委托的问题。MKMapView代表调用问题

在iOS5中,当我点击了一个引脚上的MapView, 的didSelectAnnotationView:代表将首先调用, 而下是viewForAnnotation:代表呼吁。

在iOS6的,当我点击了一个引脚上的MapView, 的viewForAnnotation:称为第一,接下来是didSelectAnnotationView代表呼吁。

所以我的应用程序工作在iOS5的罚款,但在iOS6的作品不好, 那是因为有坐标我需要在didSelectAnnotationView:代表设置的信息,

如果viewForAnnotation:委托是在didSelectAnnotationView:之前调用,然后我会得到错误的坐标信息。

有人有什么想法吗?谢谢!

+0

那么错误是在ios5然后......它怎么能调用'didSelectAnnotationView:'它甚至给了委托人有机会提供一个有效的视图(通过viewForAnnotation) –

+0

因为在点击pin之前,viewForAnnotaion委托已经称为,并将其添加到Mapview中。 – Johnny

+0

使用[annotation isKindOfClass:[MKMapAnnotation class]] 和[annotation isKindOfClass:[MKMapCalloutAnnotation class]] – Johnny

回答

0

修改逻辑。

准备viewForAnnotation中的视图(理论上 - 可以随时调用)。这是正确的地方!

“要显示指定注释的注释视图或如果要显示标准注释视图,则为零。”

1

viewForAnnotation当iOS需要显示您的注释之一时,可以调用并且将被调用。它与调用didSelectAnnotationView时无关。你可能会认为你在iOS 5中发现了一种模式,但这只是你应用程序中的某种东西的侥幸,而且绝不应该依赖它。如果你正确地使用它,它将在iOS 5和6以及6.1,6.2,6.anything中工作,我猜他们也不会对iOS 7做任何改变。如果您查看viewForAnnotation的签名,您会看到其中一个参数是注释。这是应用程序试图绘制的项目,当您调用[mapView addAnnotation:myAnnotation]时,它会提供有关您注释的信息。因此将其转换为MKAnnotation实现并提取信息。