【问题标题】:How do I know which callout has been clicked?我如何知道点击了哪个标注?
【发布时间】:2012-10-01 16:08:00
【问题描述】:
我在尝试识别点击了哪个标注气泡时遇到了很多麻烦。
有没有一种方法可以识别标注气泡,因为我在这里尝试了许多示例,但是因为我对 Objective CI 很陌生,似乎无法弄清楚如何使用它们。
我一直在尝试使用以下答案,但我对它们感到困惑
How to track which annotation callout clicked
我正在考虑标记注释,但这甚至让我感到困惑。 :(
取自上述链接中的第二个答案:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]]){
return nil;
if(annotation.tag == 111)
//Do something
else
//Do some other thing
}
这个 sn-p 的第一部分是如何工作的,也许如果我能更好地理解它,我就会知道我在处理什么。
此外,当我点击标注时,我将如何检索标签,以便我可以让应用程序分别响应。
【问题讨论】:
标签:
ios5
xcode4.2
mkmapview
mkannotationview
【解决方案1】:
您可以将 MKPinAnnotationView 子类化,以便在何时识别它
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view
被调用。
【解决方案2】:
您必须创建扩展 MKAnnotation 的类并创建一些属性(如标签)并分配唯一值或标签并添加到地图视图中。
Place* home = [[Place alloc] init] ;
home.name = [dForMap valueForKey:@"shortaddress"];
home.latitude = [[dForMap valueForKey:@"latitude"]floatValue];
home.longitude = [[dForMap valueForKey:@"longitude"]floatValue];
home.description = [dForMap valueForKey:@"shortaddress"];
home.flierid = count;
PlaceMark* from = [[PlaceMark alloc] initWithPlace:home] ;
from.flierid = count;
from.mapAnnotationType = MapAnnotationTypeProperty;
[self addAnnotation:from];
当点击标注气泡时,您可以像这样检查 didSelectAnnotationView 方法中的属性。
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
PlaceMark *a = (PlaceMark*)view.annotation;
Place *test = a.place;
int tag = test.flierid;
}
谢谢。