dismissModalViewControllerAnimated无法正常工作

时间:2011-02-03 00:37:00

标签: iphone model-view-controller ios uinavigationcontroller

我有一个带UINavigationController的UITabbarController。 NavigationController中的视图呈现MVC(AddClockNavigationController)。这个MVC有一个带有视图的nib和一个UINavigationController。 NavigationController.view作为子视图添加到MVC的视图中。

我的MVC中的NavigationController有两个按钮,一个取消和一个完成。当按下其中任何一个时,MVC应该被解雇。 这些按钮的IBActions位于UINavigationController的视图(AddClockViewController)中,但每当按下它们时,MVC就不会消失。 如果我把动作放到MVC中,它就会消失。 如果我把函数放在我的MVC中并使用[self.parentViewController myFunction]从我的viewController调用它,它就不会消失。

我怎样才能让它从我的视线中消失?

我想我的言论非常混乱,但我希望你理解它。
我IB的观点: enter image description here

最好的问候,
保罗佩伦

修改 我已尝试使用[self dismissModalViewControllerAnimated:YES];[self.parentViewController dismissModalViewControllerAnimated:YES];[self.navigationController dismissModalViewControllerAnimated:YES];[self.parentViewController.navigationController dismissModalViewControllerAnimated:YES];,并且如上所述,使用parentView中的函数解除它。什么都行不通。

2 个答案:

答案 0 :(得分:7)

当某个视图控制器呈现另一个视图控制器时,它将成为父视图控制器。因此,如果你想解雇模态视图控制器,那么你必须选择:

    来自父视图控制器调用的
  1. [self dismissModalViewControllerAnimated:YES];

  2. OR

      来自模态视图控制器调用的
    1. [self.parentViewController dismissModalViewControllerAnimated:YES];

    2. 您实际上不需要导航控制器(因为您不推/弹任何视图控制器)。只需将UINavigationBar添加到MVC并在其上放置按钮即可。然后向他们添加操作并执行选择#2。 您的代码无法正常工作,因为导航控制器没有父级,因为它没有显示为模态。

答案 1 :(得分:4)

一种情况是在调用showController的viewDidAppear之前调用解除{Modal} ViewControllerAnimated。在这种情况下,呈现的是动画== YES。在呈现完全出现之前,它被解雇了。

要解决此问题,您需要在解雇时检查,检查是否调用了viewDidAppear,如果没有,则在-viewDidAppear中推迟解雇。