您好我有一个弹出注释的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
}
答案 0 :(得分:0)
是。如果要执行推送segue,源视图控制器(地图视图控制器)应嵌入导航控制器中。
我不确定为什么你的注释/标注没有出现在那种情况下 - 我已经看到很多项目以这种方式正常工作。也许您在添加注释时对地图视图的引用不是您认为的那样? (而且您正在为nil
添加注释?)您需要提供更多详细信息以便我们提供帮助。 (编辑您的问题或发布新问题,因为这是一个单独的问题。)
是。致电prepareForSegue:sender:
后,系统会调用performSegueWithIdentifier:sender:
。
这些方法中的“sender”参数完全由您自己使用 - 它存在的唯一原因是允许您将一些上下文从调用performSegueWithIdentifier:sender:
的代码传递给{{1}的实现}。 (或者在用户点击某些控件时自动执行segue的情况下,允许您的prepareForSegue:sender:
实现知道触发了哪个控件。)
所以,传递你想要的任何东西:prepareForSegue:sender:
很好,如果你没有使用它,self
也是如此。或者,如果您的nil
实现知道哪个标注被点击是有用的,您可以考虑将注释视图的注释作为“发送者”传递(例如,因此它可以使用适当的信息设置目标视图控制器)。