如何检测视图控制器何时被解除?

时间:2012-06-08 05:47:18

标签: iphone objective-c ios xcode segue

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

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

由于我的知识有限,我可以使用下面的第二行删除引脚,但问题是我可以看到在点击rightCalloutAccessorView图标之后和显示详细视图之前删除了引脚和注释。所以这意味着如果用户然后点击详细信息屏幕上的完成按钮,他们将返回到mapview,并且已经删除了引脚和注释。如果用户点击“删除”按钮,我只想删除它。

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

所以我的问题确实是:

  1. 我在哪里放入removeAnnotation代码?在它的当前位置,即使在详细视图出现之前也会移除引脚。
  2. 如何检测详细视图上的“删除”按钮是否已被点击?
  3. 感谢。

1 个答案:

答案 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