如何在地图视图(主)控制器中检测到详细信息视图控制器已被关闭? 我有一个带有图钉和注释的地图视图。 当在任何注释上点击 rightCalloutAccessoryView 时,将通过 performSegueWithIdentifier 调用模态详细信息视图控制器。顺便说一句,我不知道这是否正确,但是主视图和细节视图控制器由导航控制器连接。
我的目标是根据用户在详细信息视图控制器上的操作,在地图视图(主视图)上执行条件操作。 特别是如果他们点击了"删除图钉"功能,我想在控件返回到地图视图时删除图钉。 如果他们只是点击"完成"按钮,那么我希望图钉和注释保留在屏幕上。
以我有限的知识,我能够删除下面第二行的图钉,但问题是我可以看到在点击 rightCalloutAccessorView 图标后和显示详细信息视图之前立即删除了图钉和注释。 因此,这意味着如果用户点击详细信息屏幕上的"完成"按钮,他们将返回到地图视图,并且已经删除了图钉和注释。 我只希望在用户点击"删除"按钮时将其删除。
[self performSegueWithIdentifier:@"PinDetail" sender:self];
[self.mapView removeAnnotation:MA];
所以我的问题实际上是:
- 我应该把删除注释代码放在哪里?在其当前位置,甚至在详细视图出现之前就会删除图钉。
- 如何检测详细信息视图上的"删除"按钮是否已点击?
谢谢。
您可以使用委托根据详细信息视图中的操作对地图视图执行操作。在 performSegueWithIndentifier 中,您可以将详细信息视图指定为地图视图的委托,它将为您执行操作。
或者,您可以为详细信息视图设置目标和选择器,当详细信息视图中发生任何操作时,您可以调用目标为地图视图的选择器,如下所示:1.In 执行Segue方法设置目标,如下所示:
[theController setTarget:self andSelector:@selector(performAction)];
其中控制器是您的目标视图控制器,即详细信息视图控制器。
2.In 详细视图控制器 .h 文件
id m_Target;
SEL m_Selector;
在详细视图中 控制器.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文件中定义执行操作