6

我试图解除一个名为 ModaViewController C,回到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所有内容时,我的所有内容都是空的/已解除分配。我也在使用ARC。UIPickersB

4

2 回答 2

12

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

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

即使您从 B 呈现 C,实际呈现视图控制器将是导航控制器。此代码将关闭 C 然后弹出 B,但在 ut 弹回 A 之前您会看到 B 片刻。如果您不想看到这个,那么您应该使用 unwind segue 直接从 C 返回到 A。

在您所说的情况下,您的第二个问题不应该发生在您所说的情况下。你必须提供更多关于你在 B 中做什么来解决这个问题的信息。

于 2014-04-02T16:11:43.227 回答
0

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

 -(void)dismissTheModal {
     [self dismissViewControllerAnimated:YES completion:^{
         [self popViewController];
  }];  
于 2014-04-02T15:51:37.990 回答