删除视图控制器并移至下一个视图控制器

Posted

技术标签:

【中文标题】删除视图控制器并移至下一个视图控制器【英文标题】:Remove viewcontroller & move to next view controller 【发布时间】:2014-11-27 09:00:27 【问题描述】:

您好,我一直在开发 ios 应用程序。我正在做的是在不同的视图控制器之间导航。但问题是我想从 emoery 完成当前的视图控制器,然后移动到下一个视图控制器。

我正在使用 `[self.view removeFromSuperview];用于完成当前视图和使用

 self.loginView = [self.storyboard instantiateViewControllerWithIdentifier:@"LOGIN"];
    [self presentViewController:self.loginView animated:NO completion:nil];

用于移动到下一个视图控制器,但问题是我无法将其从内存中删除。

请告诉我该怎么做?

提前致谢。

`

【问题讨论】:

【参考方案1】:

最好创建一个容器视图控制器来管理您的视图控制器。例如,在容器控制器的 viewDidLoad: 中添加当前控制器:

[self addChildViewController:self.currentViewController];
[self.currentViewController didMoveToParentViewController:self];
[self.view addSubView:self.currentViewController.view];
//here set up currentViewController view's frame or constraints if needed

当你需要打开登录控制器时,这样做:

[self addChildViewController:loginViewController];
[self.loginViewController didMoveToParentViewController:self];
[self.view addSubView:loginViewController.view];
//here set up loginViewController view's frame or constraints if needed

//then remove current view controller
[self.currentViewController willMoveToParentViewController:nil];
[self.currentViewController removeFromParentViewController];
[self.currentViewController.view removeFromSuperview];

【讨论】:

您要使用导航控制器推送新控制器吗?据我了解,您现在不使用它。【参考方案2】:

Remove from superview 会将其从当前视图中删除,但操作系统在需要时才会将其删除(这是更多解释的主题,假设它不会尽快将其删除)。

如果您想删除某些内容,只需将其称为 nil:

self.view = nil;

这将使指针指向 nil,因此视图将不再存在。 (视图确实会在某个地方,但您无法访问它)

【讨论】:

如果这样写 [self.view removefromsuperview] self.loginView = [self.storyboard instantiateViewControllerWithIdentifier:@"LOGIN"]; [self presentViewController:self.loginView Animation:NO completion:nil];然后它说您正在尝试删除不在视图层次结构中的视图控制器 @TarunSharma 在删除视图之前,您需要先呈现一个新的* 【参考方案3】:

我正在修改你的代码

self.loginView = [self.storyboard instantiateViewControllerWithIdentifier:@"LOGIN"];
[self presentViewController:self.loginView animated:NO completion:nil];

您在这里所做的是展示您的登录视图控制器。

self:这是您当前正在处理的视图控制器的实例。那么你怎么能从记忆中删除自我。 (不可能)

您可以采用其他方式。

例如:1.更改根视图控制器

    弹出到根视图控制器,然后推送登录视图控制器。

【讨论】:

能否提供一段代码作为示例【参考方案4】:

如果你尝试从导航控制器堆栈中移除 UIView 和整个 UIViewController,请使用这个 sn-p

NSMutableArray *stack = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
[stack removeObject:yourController];
self.navigationController.viewControllers = stack;

请注意,仅当您已经传递到下一个控制器视图时才使用它。

UPD:

哦,现在我明白你要做什么了。而且我无法弄清楚,为什么您要尝试以这种方式(模态)步进控制器。我认为您应该将 UINavigationController 与直接从情节提要定义的导航序列一起使用。看at this 文章,其中苹果纯粹解释了导航是什么。 That article 是关于模态视图

【讨论】:

我应该在移动到下一个视图控制器之前还是之后写它 什么是导航数组

以上是关于删除视图控制器并移至下一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

登录后更新TabView并移至主视图

如何在我的应用程序中使用 Facebook 登录并在成功登录后移至下一页/视图控制器?

如何在视图控制器时间线中跳回两步?

故事板和视图控制器

移动到根视图控制器而不显示子视图

如何从 appdelegate xcode 11 swift 5 呈现视图控制器