iOS - ViewController从父控制器中删除后是否会被取消分配?

时间:2016-10-21 05:42:41

标签: ios objective-c iphone uiview uiviewcontroller

我正在使用注册/登录的应用程序。

我的根控制器是UITabBarController

每个标签都是一个视图控制器。

我想让其中一个成为登录标签。

每次启动应用程序并且用户切换到此选项卡时,它都会检查用户是否已登录。如果没有,则会显示注册表控制器,同时显示登录控制器用户登录时。

为了实现这个功能,我分别编写了两个视图控制器(寄存器1和登录一个)。

为了遵守 MVC 风格,我还制作了两个 UIView 类来渲染视图。

总结一下,结构是

root viewcontroller(UITabBarController) -> user tab controller(UIViewController) -> login/register view controller(UIViewController -> login/register view(UIView)

login/register controlleruser tab controller childViewController

用户注册后,我希望从register controller删除user tab controller,这是其父控制器。

当我在视图(UIView)中处理触摸事件时,我在其中创建协议并使用户选项卡控制器成为其委托

注册完成后,视图会告诉代理删除其子控制器。

#pragma mark - RegViewDelegate

-(void)parentViewControllerPop{
    [_cRegController removeFromParentViewController];
    NSLog(@"_cRegController removed from parent viewcontroller");
}

然而,在那之后,视图仍然显示在屏幕上,为什么?

我不认为设计是好的,但我不知道实现我想要的最佳方式是什么。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:-1)

要从父级移除子视图控制器,您需要执行以下3个步骤:

viewController.willMoveToParentViewController(nil)    
viewController.view.removeFromSuperview() 
viewController.removeFromParentViewController()

参考:Removing a Child View Controller