删除ViewController

时间:2012-04-17 11:07:56

标签: iphone uinavigationcontroller uitabbarcontroller

在我的应用程序中,我有一个登录屏幕,我在启动时以模态方式呈现。成功登录后,用户将被重定向到UITabBarController,它有五个UINavigationController(用于选项卡)。

在一个标签上,我有一个“注销”按钮,以便用户被重定向回登录屏幕。 这很好。

但我想要做的是每次用户登录时加载UITabBarController。这意味着不应该重用UITabBarController。目前,标签中的内容(我从网上加载数据)保持不变,即使新登录完成也是如此。

如何使用UINavigationcontrollers发布/弹出/忽略UITabBarController?


到目前为止我尝试了什么:

当我按下“退出”按钮时,我将用户推回登录界面:

[self.navigationController presentModalViewController:navigContrLogin animated:YES];

[[self navigationController] popToRootViewControllerAnimated:YES]; --> NOT WORKING
[self.navigationController popViewControllerAnimated:NO]; --> NOT WORKING
[self.tabBarController release]; ---> NOT WORKING

有人可以帮帮我吗?


编辑: 这是我如何添加UITabBarController。我在用户单击“登录”按钮时执行此操作:

[self.navigationController dismissModalViewControllerAnimated:NO];                    
[self.navigationController setNavigationBarHidden:YES]; 

[self.navigationController pushViewController:tabBarController animated:NO];       
[self.navigationController removeFromParentViewController];

EDIT2:我解决了。我正在做的是当用户点击退出按钮时,我从应用委托调用导航控制器并使用它来推送登录视图控制器。

MyAppDelegate *del = (MyAppDelegate*)[UIApplication sharedApplication].delegate;
    [del.navControllerLogin pushViewController:loginController animated:YES];

3 个答案:

答案 0 :(得分:0)

您是否尝试将其从superview中删除然后将其释放?然后添加新的ViewControllers?

for (UIView *view in self.window.subviews){
        if (view == tabBarController.view) {
            [view removeFromSuperview];            
        }
}
[tabBarController release];
UITabBarController *newTabBarController = [[UITabBarController alloc] init];
newTabBarController.viewControllers = nil; //ADD NEW VIEWCONTROLLERS
[self.window addSubview:newTabBarController.view];

答案 1 :(得分:0)

我不会这样做。因为从子视图管理(发布/零)父视图不是一个好习惯。

  1. 在应用启动后初始化并显示标签栏控制器。
  2. 如果用户未登录,则显示loginviewcontroller。如果已经登录则不需要。
  3. 成功登录后发布通知并捕获所需的地点。
  4. 如果用户点击退出,清除用户凭据,用户相关数据并再次显示loginviewcontroller。

答案 2 :(得分:0)

我将从appDelegate添加和删除模态视图控制器和tabbarcontroller。

[myAppDelegate addLoginViewController];
[myAppDelegate removeLoginViewController];
[myAppDelegate addTabBarController];
[myAppDelegate removeTabBarController];