【问题标题】:present View controller not working当前视图控制器不工作
【发布时间】:2014-06-20 08:29:50
【问题描述】:

您好,我正在开发一个应用程序,我在其中使用新的UIViewController

[self presentViewController:VC animated:NO completion:nil];

在新呈现的视图控制器中,我正在使用

返回上一个视图
[self presentViewController:oldVC animated:NO completion:nil];

这是我的要求,因为无法保证从何处呈现此视图。

但问题是,当我展示旧视图控制器时,它会转到 viewDidLoad,但不显示旧视图控制器,它仍保留在同一个视图控制器上。

谁能告诉我为什么会这样,有什么问题吗??

【问题讨论】:

  • 你不会通过呈现它回到之前的viewcontroller,你使用[self dismissViewControllerAnimated:NO completion:nil];
  • @rckoenes:我要求使用[self presentViewController:oldVC animated:NO completion:nil]; 而不是[self dismissViewControllerAnimated:NO completion:nil]
  • 那么您稍后会遇到大问题,因为presentViewController: 将在当前视图控制器中添加一个视图控制器。因此,您最终将处于另一个视图的堆栈中,直到设备内存不足。意思是我需要下楼梯,但只能使用上楼梯。谁使用presentViewController: 是一个要求,除了dismissViewControllerAnimated:presentViewController: 对应。
  • 我们不能在下一个视图控制器出现后关闭旧的视图控制器吗?
  • 否,因为旧视图是呈现新视图的视图。

标签: ios uiviewcontroller


【解决方案1】:

你不应该回到presentViewController:之前的视图控制器,因为它可能会导致一个永无止境的循环,如果用户这样做,那么你的应用迟早会崩溃。
但是如果需要该动画(即从下到上制作动画),那么您可以制作自己的dismissViewController 方法,该方法将在动画调用[self dismissViewControllerAnimated:NO completion:nil] 的完成块中从下到上制作oldVC 动画。

【讨论】:

    【解决方案2】:

    为我的问题找到了解决方案! 我没有使用presentViewController:dismissViewController: 方法,而是创建了segue,并要求应用程序根据segue 标识符根据需要以编程方式执行segue。在https://stackoverflow.com/a/21241276/1882781找到解决方案

    【讨论】:

      【解决方案3】:

      只是一个指针。 segue 方法肯定会起作用。但是如果你使用这个方法来呈现view controllers 模态,那么之前的view controllers 会一直保留在memory 中,直到你手动dismiss 他们。
      这将导致严重的memory 应用使用问题。

      即使不是最好的,更好的选择是获取AppDelegate 单个共享实例 的句柄,并将其rootViewController 设置为您提供的viewController

      例如:-

      yourViewControllerClassName *sampleVC = [[yourViewControllerClassName alloc] init];
      [self presentViewController:sampleVC animated:YES completion:^{
          yourAppDelegateClassName *appdelegate = [UIApplication sharedApplication].delegate;
          appdelegate.window.rootViewController = sampleVC;
      }];
      

      这将从内存中释放现有的viewController 对象。

      PS:确保在所有类中导入appdelegate.h 文件,或者您也可以将其写入.pch 文件中。

      希望这会有所帮助! :)

      【讨论】:

        猜你喜欢
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        • 2012-02-19
        • 1970-01-01
        • 2019-07-03
        • 1970-01-01
        相关资源
        最近更新 更多