2

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

我的目标是根据用户对详细视图控制器的操作对地图视图(主视图)采取有条件的操作。具体来说,如果他们已经点击了“移除图钉”功能,我想在控制返回到地图视图时移除图钉。如果他们只是点击完成按钮,那么我希望图钉和注释保留在屏幕上。

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

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

所以我的问题真的是:

  1. 我在哪里输入 removeAnnotation 代码?在当前位置,销钉的移除甚至在详细视图出现之前就已发生。
  2. 如何检测是否已点击详细视图上的删除按钮?

谢谢。

4

1 回答 1

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

于 2012-06-08T05:50:48.397 回答