iOS - 从父控制器中删除视图控制器后,是否会解除分配视图控制器?



我正在开发一个带有注册/登录的应用程序。

我的根控制器是一个UITabBarController

每个选项卡都是一个单独的视图控制器。

我想将其中一个作为登录选项卡。

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

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

为了遵循 MVC 样式,我还制作了两个 UIView 类来呈现视图。

总而言之,结构是

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

login/register controlleruser tab controller子视图控制器

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

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

注册完成后,视图会告知委托删除其子控制器。

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

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

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

谁能帮忙?

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

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

参考:删除子视图控制器。

最新更新