【问题标题】:Modal View Controller, dismiss and pop back to view controller模态视图控制器,关闭并弹回视图控制器
【发布时间】:2014-04-02 15:46:21
【问题描述】:

我试图关闭一个名为 C 的 ModaViewController,返回到 A。 ModalViewController 在B 中提供。因此导航流程是 A->B - (present ModalView) -> C。我可以将 ModalViewController 解散回 B,但我无法在完成括号中弹回 A。这是我尝试过的代码:

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

ModalViewController 被解除,但不会弹回 A。我在 IBAction 中调用此代码块。

有什么建议吗?

第二点,当我关闭 ModalViewController 时,控制器 B 中的所有 UIPickers 都是空的/已释放。我也在使用 ARC。

【问题讨论】:

  • 这个方法,在哪个控制器中调用? A、B 还是 C?
  • @DuricanRadu 它在 C 中被调用,它是 ModalViewController

标签: ios modalviewcontroller poptoviewcontroller


【解决方案1】:

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

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

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

在您所说的情况下,您的第二个问题不应该发生在您说的情况下。您必须提供更多信息,说明您在 B 中为解决该问题所做的工作。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 2014-08-27
      • 2013-01-08
      相关资源
      最近更新 更多