【问题标题】:How to dismiss the two or more dismissModalViewController?如何解除两个或多个dismissModalViewController?
【发布时间】:2011-05-15 15:22:47
【问题描述】:

我需要关闭两个模态视图控制器,我知道如何弹出两个或更多视图控制器

        UINavigationController* navController = self.navigationController;
    NSArray *array=[navController viewControllers];
    UIViewController* controller = [navController.viewControllers objectAtIndex:0];
    [navController popToViiewController:controller animated:YES];

这就是我如何导航回我的第一个视图,但如果有两个或多个关闭模式视图,那么我该如何导航回来

请帮帮我, 谢谢, 马丹·莫汉

【问题讨论】:

  • 要弹出到根视图控制器,你可以这样做:[self.navigationController popToRootViewControllerAnimated:YES]; 而不是你自己的方式,这有点笨拙。
  • 它存在模态视图控制器,我该如何弹出它

标签: iphone objective-c dismiss


【解决方案1】:

来自-[UIViewController dismissModalViewController] 的文档:

如果你呈现几个模态视图 控制器连续,因此 构建一堆模态视图 控制器,在一个 堆栈中较低的视图控制器 关闭其直接子视图 控制器和所有视图控制器 在堆栈上的那个孩子之上。什么时候 发生这种情况,只有最顶层的视图 以动画方式被解雇; 任何中间视图控制器都是 简单地从堆栈中删除。这 最顶层的视图被使用它的 模态过渡风格,可能 不同于其他人使用的样式 查看堆栈中较低的控制器。

【讨论】:

    【解决方案2】:

    使用下面的代码

    [[[self presentingViewController] presentingViewController]  dismissModalViewControllerAnimated:YES];
    

    【讨论】:

      【解决方案3】:

      我使用以下实用程序静态方法来模拟 popToRootViewController 的堆栈模式:

      // Util.m
      + (void)popModalsToRootFrom:(UIViewController*)aVc {
          if(aVc.parentViewController == nil) {
              return;
          }
          else {
              [Util popModalsToRootFrom:aVc.parentViewController];  // recursive call to this method
              [aVc.parentViewController dismissModalViewControllerAnimated:NO];
          }
      }
      

      你可以这样使用它:

      [Util popModalsToRootFrom:aViewController];
      

      如果你想要更高级的东西,你可以这样做:

      + (void)popModalsFrom:(UIViewController*)aVc popCount:(int)count {
          if(aVc.parentViewController == nil || count == 0) {
              return;
          }
          else {
              [Util popModalsFrom:aVc.parentViewController popCount:count-1];  // recursive call to this method
              [aVc.parentViewController dismissModalViewControllerAnimated:NO];
          }
      }
      

      然后将模态的数量传递给 pop,或者只传递 -1 以一直弹出到根。

      【讨论】:

        【解决方案4】:
        UINavigationController* navController = self.navigationController;
        NSArray *viewControllers=[navController viewControllers];
        UIViewController* controller = [viewControllers objectAtIndex:0];
        [navController popToViewController:controller animated:YES];
        

        如果您在上述代码中将对象设置为索引 0,它将带您进入第一个视图,这是一个推送视图控制器。

        1)Rootview--->moodalview1--->moodalview2--->moodalview3 如果您使用上述代码,那么您将处于根视图中。

        2)Rootview--->Pushview1---->moodalview1--->moodalview2----->moodalview3。如果您使用上面的代码,您将在 PushView 中。

        【讨论】:

          【解决方案5】:

          对于iOS 5,支持animation==YES(视图将按顺序隐藏)和completion块:

          + (void)dismissAllVCsForVC:(UIViewController *)VC animated:(BOOL)animated completion:(BPSimpleBlock)completion {
              if (VC.presentedViewController == nil) {
                  if (completion) {
                      completion();
                  }
              } else {
                  [BaseViewController dismissAllVCsForVC:VC.presentedViewController
                                                  animated:animated
                                                completion:
                   ^{
                       [VC dismissViewControllerAnimated:animated completion:completion];
                   }];
               }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-18
            • 2012-06-02
            • 1970-01-01
            • 1970-01-01
            • 2014-07-04
            • 2015-11-26
            • 1970-01-01
            • 2013-04-15
            相关资源
            最近更新 更多