在iPhone应用程序中注销时刷新tabbarcontroller视图

时间:2011-12-04 03:56:46

标签: uinavigationcontroller uitabbarcontroller

我们有一个标签栏+导航控制项目。我们通过界面构建​​器创建了一个标签栏,并通过界面构建​​器将所有标签项添加到标签栏控制器。 我们的应用程序有一个登录屏幕,我们在开始时将其显示为模式表单。用户通过身份验证后,将关闭登录屏幕(使用dismissModalScreen)并显示MainWindow。这一切都很好。

现在,我们点击退出选项,我们应该显示登录屏幕。我们也能够证明这一点。但问题是,一旦用户再次进行身份验证,我们希望新加载所有屏幕。目前,所有屏幕都保持其状态并保留以前的数据。

我们试图做的是:

[AppDelegate tabBarController release];

AppDelegate.tabBarController = nil;

我们尝试发布tabBarController并将其设置为nil。但是一旦显示视图,我们就无法选择任何选项卡,视图也是空白的。

我们需要的是:

一旦用户第二次登录,如何释放并重新加载作为tabbar一部分的每个viewcontroller。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我们找到了出路。我们现在正在做的是,一旦用户重新登录,我们将释放视图控制器并重新创建它们并将其设置回uitabbar。

NSMutableArray * arrControllers = [[AppDelegate.tabBarController.viewControllers] mutablecopy]; [arrControllers removeAtIndex:3]; [arrControllers removeAtIndex:2];

----创建新的控制器

UIViewController viewController2 = [[UIViewController alloc] initWithNibName:@“viewController2”bundle:nil] autorelease];

UIViewController viewController3 = [[UIViewController alloc] initWithNibName:@“viewController3”bundle:nil] autorelease];

- 创建导航控制器

UINavigationController navViewController2 = [[[[UINavigationController alloc] initWithRootViewController:viewController2] autorelease];

UINavigationController navViewController3 = [[[[UINavigationController alloc] initWithRootViewController:viewController3] autorelease];

[arrControllers addObject:navViewController2];

[arrControllers addObject:navViewController3];

[AppDelegate.tabViewController setViewControllers:arrControllers];

此更改后工作正常。

我们遇到的唯一问题是,如果我们从阵列中释放所有对象,我们就会得到一个卡车。是因为,当您释放allObjects时,第一个作为RootViewController的控制器正在被释放?

由于