【问题标题】:Jump to a specific view in navigation controller跳转到导航控制器中的特定视图
【发布时间】:2014-05-14 15:54:28
【问题描述】:

我有 4 个视图控制器(A、B、C、D),它们按此顺序连接,并且导航控制器指向 A。我的问题是有没有办法让我直接从 A 跳转到 C?

【问题讨论】:

  • “连接”是什么意思?这是一个故事板应用程序吗?你想在去 C 的路上装载 B 吗?在这里需要更多信息。
  • 这取决于你如何回到 A。如果你已经弹出,那么你必须分配 init viewcontroller 并推送到导航堆栈,否则你可以遍历 navigationcontoller.controllers 数组并弹出直到特定的 viewcontroller跨度>

标签: ios objective-c uiviewcontroller uinavigationcontroller


【解决方案1】:

你可以创建一个UIStoryboardSegue将A连接到C,然后在segue中调用performSegueWithIdentifier:和对应的ID来触发它。

【讨论】:

【解决方案2】:
【解决方案3】:

对于 Swift 3

    let viewControllers: [UIViewController] = self.navigationController!.viewControllers ;
    for aViewController in viewControllers {
        if(aViewController is YourViewController){
           self.navigationController!.popToViewController(aViewController, animated: true);
        }
    }

【讨论】:

    【解决方案4】:

    是的,你需要做的就是实例化视图控制器,然后pushViewController:animated:

    UINavigationController 应该为您完成剩下的工作,包括准备好时弹出。

    希望有帮助,这里是source

    【讨论】:

      【解决方案5】:

      如果您使用的是 nib,那么这段代码会有所帮助

      NSArray *viewControllersArray=[self.navigationController viewControllers];
      id viewController ;
      UIViewController *homeVC=nil;
      for(int i=0;i<[viewControllersArray count];i++)
      {viewController = [viewControllersArray objectAtIndex:i];
          if([viewController isKindOfClass:[classname class]])
          { homeVC=[viewControllersArray objectAtIndex:i];
              break;
          }
      }if(homeVC)
      {
          [self.navigationController popToViewController:homeVC animated:YES];
      
      }else{
          classname  *objViewController=[[classname alloc]init];
          [self.navigationController pushViewController:objViewController animated:YES];
          [objViewController release];
      }
      

      【讨论】:

        【解决方案6】:

        斯威夫特

        如果你想回到特定的视图控制器

        for viewcontroller in self.navigationController!.viewControllers as Array {
                    if viewcontroller.isKindOfClass(HomeVC) { // change HomeVC to your viewcontroller in which you want to back.  
                        self.navigationController?.popToViewController(viewcontroller as! UIViewController, animated: true)
                        break
                    }
                }
        

        【讨论】:

          【解决方案7】:

          像这样转到特定的视图控制器

          [self.navigationController popToViewController:[[self.navigationController viewControllers]objectAtIndex:1] animated:YES];
          

          【讨论】:

            【解决方案8】:

            是的,你可以。为了安全起见,假设您不知道视图控制器的连接顺序。所以,现在,你只需要为你的控制器分配一个类,C。假设它是 ViewController_C.h。

            第 1 步:转到情节提要中的类检查器,并将这个 ViewController_C 类分配给控制器 C。

            第 2 步: 现在,在分配给控制器 A 的 View Controller 类中,编写以下方法。

            -(int)getViewControllerIndex{
                int i=0;
                for(UIViewController *vc in [self.navigationController viewControllers]){
                    if([vc isKindOfClass:[ViewController_C class]]){
                        return i;
                    }
                    i++;
                }
                return 0;
            }
            

            然后在你想跳转到Controller, C的时候调用这个方法。

            int index = [self getViewControllerIndex];
            [self.navigationController popToViewController:[[self.navigationController viewControllers]objectAtIndex:index] animated:YES];
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-06
              • 1970-01-01
              • 1970-01-01
              • 2016-06-11
              相关资源
              最近更新 更多