如何检测视图控制器何时被关闭



如何在地图视图(主)控制器中检测到详细信息视图控制器已被关闭? 我有一个带有图钉和注释的地图视图。 当在任何注释上点击 rightCalloutAccessoryView 时,将通过 performSegueWithIdentifier 调用模态详细信息视图控制器。顺便说一句,我不知道这是否正确,但是主视图和细节视图控制器由导航控制器连接。

我的目标是根据用户在详细信息视图控制器上的操作,在地图视图(主视图)上执行条件操作。 特别是如果他们点击了"删除图钉"功能,我想在控件返回到地图视图时删除图钉。 如果他们只是点击"完成"按钮,那么我希望图钉和注释保留在屏幕上。

以我有限的知识,我能够删除下面第二行的图钉,但问题是我可以看到在点击 rightCalloutAccessorView 图标后和显示详细信息视图之前立即删除了图钉和注释。 因此,这意味着如果用户点击详细信息屏幕上的"完成"按钮,他们将返回到地图视图,并且已经删除了图钉和注释。 我只希望在用户点击"删除"按钮时将其删除。

   [self performSegueWithIdentifier:@"PinDetail" sender:self];
   [self.mapView removeAnnotation:MA];

所以我的问题实际上是:

  1. 我应该把删除注释代码放在哪里?在其当前位置,甚至在详细视图出现之前就会删除图钉。
  2. 如何检测详细信息视图上的"删除"按钮是否已点击?

谢谢。

您可以使用委托根据详细信息视图中的操作对地图视图执行操作。在 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文件中定义执行操作

最新更新