删除viewcontroller&移动到下一个视图控制器

时间:2014-11-27 09:00:27

标签: ios objective-c iphone model-view-controller

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

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

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

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

请告诉我该怎么做?

提前致谢。

`

4 个答案:

答案 0 :(得分:0)

从superview中删除会将其从当前视图中删除,但操作系统不会删除它直到他需要(这是更多解释的主题,让我们说它不会删除它尽快删除它)。

如果您想删除某些内容,请将其命名为nil:

  

self.view = nil;

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

答案 1 :(得分:0)

如果您尝试不仅删除UIView,而且还要从导航控制器堆栈中删除整个UIViewController,请使用此代码段

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

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

<强> UPD:

哦,现在我明白你要做什么了。而且我无法弄清楚,为什么你会尝试以这种方式(模态地)控制你的控制器。我认为您应该使用UINavigationController和直接从故事板定义的导航segue。看看at this文章,其中苹果纯粹解释了导航是什么。 That article是关于模态视图的

答案 2 :(得分:0)

我正在修改你的代码

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

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

self:这是您当前正在处理的viewcontroller的实例。那你怎么能从记忆中消除自我。 (不可能)

您可以采取其他方式。

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

  1. 弹出到根视图控制器,然后按下“登录视图”控制器。

答案 3 :(得分:0)

最好创建一个管理视图控制器的容器视图控制器。例如,在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];