0

嗨,我有一个弹出注释的 mapView,我希望能够在单击注释标注按钮时进行 segue。但是,当我这样做时,我遇到了一些问题。我有几个问题 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
}
4

1 回答 1

0

1)

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

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

2)

是的。prepareForSegue:sender:在你调用之后调用performSegueWithIdentifier:sender:

3)

这些方法中的“sender”参数完全供您自己使用——它存在的唯一原因是允许您从调用performSegueWithIdentifier:sender:. prepareForSegue:sender:(或者在用户点击某个控件时自动执行 segues 的情况下,以允许您的prepareForSegue:sender:实现知道哪个控件被点击了。)

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

于 2012-08-13T06:20:49.797 回答