【问题标题】:Problems with using popToViewController to go back to a specific view controller going to black screen使用 popToViewController 返回特定视图控制器时出现黑屏问题
【发布时间】:2015-07-07 03:28:50
【问题描述】:

我正在使用类似这样的基本操作来推送到视图。

UIStoryboard *storyboard = self.navigationController.storyboard;

MenuViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"menuViewController"];

[self.navigationController pushViewController:viewController animated:YES];

一些我可以简单使用的地方:

[self.navigationController popViewControllerAnimated:YES];

但是在一些地方我想弹出到一个特定的视图控制器。我试过的是:

UIStoryboard *storyboard = self.navigationController.storyboard;

RecordMenuViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"recordMenuViewController"];

[self.navigationController popToViewController:viewController animated:YES];

但它只是进入黑屏,就像视图不在堆栈中一样。我在这里错过了什么?

【问题讨论】:

  • [storyboard instantiateViewControllerWithIdentifier:@"recordMenuViewController"] - 创建 RecordMenuViewController 的新实例。 [self.navigationController popToViewController:...动画:YES]; - 只能返回 ViewController 的特定实例。

标签: ios objective-c uinavigationcontroller storyboard


【解决方案1】:

如果您想使用导航堆栈弹出到特定视图控制器,请执行以下操作:

NSArray* vcs = self.navigationController.viewControllers;
UIViewController* target = [vcs objectAtIndex:([vcs count] - 1) - numVCsToGoBack];
[self.navigationController popToViewController:target];

【讨论】:

    【解决方案2】:

    如果您必须弹出到堆栈中的特定视图控制器,请使用以下代码:

    (这里考虑你必须弹出到MyViewController Class)

    for (UIViewController *controller in self.navigationController.viewControllers)
    {
         if ([controller isKindOfClass:[MyViewController class]])
         {
           [navigationController popToViewController:controller animated:YES];
           break;
         }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多