模态视图控制器,关闭并弹回以查看控制器

时间:2014-04-02 15:46:22

标签: ios modalviewcontroller poptoviewcontroller

我试图将名为C的ModaViewController解除回A。 ModalViewController出现在B中。因此,导航流程是A-> B-(现在的ModalView) - > C.我能够将ModalViewController解雇回B,但我无法在完成时段中回到A.这是我尝试过的代码:

[self dismissViewControllerAnimated:YES completion:^{
    [self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:0] animated:YES];
}];

ModalViewController被解除但不会弹回A.我在IBAction中调用了这段代码。

有什么建议吗?

在第二个注释中,当我解除ModalViewController时,我在控制器UIPickers中的所有B都为空/已取消分配。我也在使用ARC。

2 个答案:

答案 0 :(得分:11)

你的代码的问题是self.navigationController将是nil。如果你有一个控制器(A)嵌入在导航控制器中,并且该控制器推送到另一个控制器(B)然后呈现你的最后一个控制器(C),那么你需要做这样的事情,

-(IBAction)dismissToBThenPop:(id)sender {
    UINavigationController *nav = (UINavigationController *)self.presentingViewController;
    [self dismissViewControllerAnimated:YES completion:^{
        [nav popViewControllerAnimated:YES];
    }];
}

即使您从B呈现C,实际的presentationViewController也将是导航控制器。这段代码将解除C然后弹出B,但是你会在弹出A回弹之前看到B.如果你不想看到这个,那么你应该使用展开segue从C直接回到A.

关于拣货员空置和解除分配的第二个问题不应该在你说你有的情况下发生。您必须提供有关您在B中所做工作的更多信息才能解决该问题。

答案 1 :(得分:0)

在ModalViewController中创建一个协议,让我们用一个方法 - (void)dismissTheModal来说ModalViewControllerDelegate,并让B实现这个协议。在显示ModalViewController之前,请执行modalViewController.delegate = self。当您调用IBAction时,请执行[self.delegate dismissTheModal],并在控制器B中执行以下操作:

 -(void)dismissTheModal {
     [self dismissViewControllerAnimated:YES completion:^{
         [self popViewController];
  }];