2013-12-23 40 views
0

我想在挖掘地图注释引脚时执行segue。即时通讯使用自定义注释类,如果这有所作为。当地图注释引脚被挖掘时执行segue

我已经试过

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { 

    NSLog(@"annotation selected"); 

    [self performSegueWithIdentifier:@"mySegue" sender:self]; 
} 

但我的NSLog心不是运行,所以我假设的方法心不是获取调用。

我所做的唯一其他事情是将注释引脚添加到我的地图视图中,并将我的视图控制器设置为地图视图代理。

这里是我添加了注释的MapView

SPMapAnnotation *pin = [[SPMapAnnotation alloc] init]; 

pin.coordinate = spotLocation.coordinate; 

pin.title = [spot objectForKey:@"spotName"]; 

[self.mapView addAnnotation:pin]; 

我怎样才能使这项工作?那didSelectAnnotation方法似乎会使这个容易做,但我不知道它是如何工作的。

+1

你有没有设置地图视图的代表上述方法的工作? – ldindu

+0

@Idindu,是在viewDidload我有self.mapView.delegate = self; – Stonep123

+0

你能告诉我们你是如何在地图视图中添加引脚注释视图的吗? – ldindu

回答

2

显然我忘了我没有分配我的mapView,直到viewDidAppear。只需要添加

self.mapView.delegate = self; 

在我alloc和inited它之后。

+0

这就是奇。在'viewDidLoad'方法中设置委托应该可以正常工作。你确定viewDidLoad中的代码实际上是在执行吗?我注意到在你说“viewDidload”的问题上有一个小写的“l”。如果方法真的是这样命名的,它就不会运行。此外,您不需要为didSelectAnnotationView实现viewForAnnotation来工作(如其他答案所示)。 – Anna

+0

是的我确定它的执行。它也被恰当地命名。是的,我意识到我不需要实现viewForAnnotation,因为我只是使用默认的注释视图。我的错误是@anna, – Stonep123

+0

。我忘了我没有分配和初始化我的地图,直到视图出现,在我分配并初始化它之后设置委托并且它也可以工作。我认为这一直是导致问题的原因。所有的时间浪费在试图找出它,并在我面前 – Stonep123

0

以下的委托方法

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKPinAnnotationView *annotationView = nil; 
    if ([annotation isKindOfClass:[SPMapAnnotation class]]) 
    { 
     annotationView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Pin"]; 
     if (annotationView == nil) 
     { 
      annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"]; 
      annotationView.canShowCallout = YES; 
      annotationView.animatesDrop = YES; 
     } 
    } 
    return annotationView; 
} 

为didSelectAnnotationView不会被调用标准标注引脚实现,你需要返回MKAnnotationView为被称为didSelectAnnotationView。