如何在mapview(主控)控制器中检测到详细视图控制器已被解除?我有一个带有引脚和注释的mapview。当在任何注释上点击rightCalloutAccessoryView时,将通过performSegueWithIdentifier调用模态详细信息视图控制器。顺便说一句,我不知道这是否正确,但主控和详细视图控制器由导航控制器连接。
我的目标是根据详细视图控制器上的用户操作,在mapview(主视图)上执行条件操作。特别是如果他们点击了删除引脚功能,我想在控件返回到mapview时删除引脚。如果他们只是点击完成按钮,那么我希望引脚和注释保留在屏幕上。
由于我的知识有限,我可以使用下面的第二行删除引脚,但问题是我可以看到在点击rightCalloutAccessorView图标之后和显示详细视图之前删除了引脚和注释。所以这意味着如果用户然后点击详细信息屏幕上的完成按钮,他们将返回到mapview,并且已经删除了引脚和注释。如果用户点击“删除”按钮,我只想删除它。
[self performSegueWithIdentifier:@"PinDetail" sender:self];
[self.mapView removeAnnotation:MA];
所以我的问题确实是:
感谢。
答案 0 :(得分:2)
您可以使用委托根据详细视图中的操作对mapview执行操作。在performSegueWithIndentifier中,您可以将详细视图指定为mapview的委托,它将为您执行操作。
或者您可以为详细视图设置目标和选择器,当详细视图中发生任何操作时,您可以调用其目标是地图视图的选择器,如下所示: 1.在performSegue方法中设置目标如下:
[theController setTarget:self andSelector:@selector(performAction)];
其中theController是您的目标视图控制器,即详细视图控制器。
2.详细查看控制器.h文件
id m_Target;
SEL m_Selector;
详细查看controller.m文件:
- (void)setTarget:(id)inTarget andSelector:(SEL)inSelector
{
m_Target = inTarget;
m_Selector = inSelector;
}
3.在驳回详情视图之前调用
if ([m_Target respondsToSelector:m_Selector]) {
[m_Target performSelector:m_Selector withObject:nil];
}
4.在地图视图控制器.m文件中定义performAction