您好我一直在开发iOS应用程序。我正在做的是在不同的视图控制器之间导航。但问题是我想从emoery完成当前视图控制器,然后移动到下一个视图控制器。
我正在使用`[self.view removeFromSuperview];用于完成整体视图和使用
self.loginView = [self.storyboard instantiateViewControllerWithIdentifier:@"LOGIN"];
[self presentViewController:self.loginView animated:NO completion:nil];
移动到下一个视图控制器,但事情是我无法将其从内存中删除。
请告诉我该怎么做?
提前致谢。
`
答案 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。更改根视图控制器
答案 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];