删除视图控制器并移至下一个视图控制器
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 是关于模态视图
【讨论】:
我应该在移动到下一个视图控制器之前还是之后写它 什么是导航数组以上是关于删除视图控制器并移至下一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章