从MKMapView中的标注中查出

时间:2012-08-13 04:29:11

标签: objective-c xcode uinavigationcontroller mkmapview segue

您好我有一个弹出注释的mapView,我希望能够在单击注释标注按钮时进行调整。当我这样做时,我遇到了一些问题。我有几个问题 1)我是否必须在导航控制器中嵌入mapViewController?如果是的话,当我这样做时,我的注释不会出现,为什么会这样? 2)从performSegueWithIdentifier调用prepareforsegue吗? 3)当你发送自我时,在这种情况下会是什么样的自我? 感谢

 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
    {
[self performSegueWithIdentifier:@"Present Photo" sender:self];
    }

实现了这里出现的问题,我曾经从id细节中获取地图控制器,但现在我认为它是导航控制器,我现在如何获得对地图控制器的引用?

-(void) updateSplitViewDetail{
// ERROR OCCURS HERE!!! No longer map controller since I embed in navigation controller
id detail = [self.splitViewController.viewControllers lastObject];
if ([detail isKindOfClass:[MapViewController class]]) {
MapViewController *mapVC = (MapViewController*) detail;
mapVC.delegate = self;
mapVC.annotations = [self mapAnnotations];
}

}


- (void)viewDidLoad
{
[super viewDidLoad];
[self updateSplitViewDetail]; //Error may be here
}

1 个答案:

答案 0 :(得分:0)

1)

是。如果要执行推送segue,源视图控制器(地图视图控制器)应嵌入导航控制器中。

我不确定为什么你的注释/标注没有出现在那种情况下 - 我已经看到很多项目以这种方式正常工作。也许您在添加注释时对地图视图的引用不是您认为的那样? (而且您正在为nil添加注释?)您需要提供更多详细信息以便我们提供帮助。 (编辑您的问题或发布新问题,因为这是一个单独的问题。)

2)

是。致电prepareForSegue:sender:后,系统会调用performSegueWithIdentifier:sender:

3)

这些方法中的“sender”参数完全由您自己使用 - 它存在的唯一原因是允许您将一些上下文从调用performSegueWithIdentifier:sender:的代码传递给{{1}的实现}。 (或者在用户点击某些控件时自动执行segue的情况下,允许您的prepareForSegue:sender:实现知道触发了哪个控件。)

所以,传递你想要的任何东西:prepareForSegue:sender:很好,如果你没有使用它,self也是如此。或者,如果您的nil实现知道哪个标注被点击是有用的,您可以考虑将注释视图的注释作为“发送者”传递(例如,因此它可以使用适当的信息设置目标视图控制器)。