0

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

在一个选项卡上,我有一个“注销”按钮,以便用户被重定向回登录屏幕。那工作正常。

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

我如何使用它的 UINavigationcontrollers 释放/pop/nil 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];
4

3 回答 3

0

您是否尝试将其从超级视图中删除然后释放?然后添加新的 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];
于 2012-04-17T11:36:58.107 回答
0

I'd add and remove both the modal view controller and tabbarcontroller from the appDelegate.

[myAppDelegate addLoginViewController];
[myAppDelegate removeLoginViewController];
[myAppDelegate addTabBarController];
[myAppDelegate removeTabBarController];
于 2012-04-17T15:48:17.200 回答
0

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

  1. 应用启动后初始化并显示标签栏控制器。
  2. 如果用户未登录,则显示 loginviewcontroller。如果已经登录不需要。
  3. 成功登录后发布通知并捕获它所需的位置。
  4. 如果用户点击注销,请清除用户凭据、用户相关数据并再次显示 loginviewcontroller。
于 2012-04-17T15:16:36.973 回答