2011-06-10 60 views
0

我有一个带有三个选项卡的UITabBarController,每个选项卡都是具有UITableView的UIViewController。 我有一个注销按钮,我想清楚了的UITableView在所有这些的UIViewController,所以从UIViewController中的一个我所做的:UITabBarViewController中的UIViewController在应用程序注销时重置

NSArray * viewControllers = ((UITabBarController *)self.parentViewController).viewControllers; 
AllGroupsViewController * agvc = [viewControllers objectAtIndex:1]; 
[agvc.groups removeAllObjects]; 
[agvc.table reloadData]; 
SearchViewController * svc = [viewControllers objectAtIndex:2]; 
[svc.results removeAllObjects]; 
[svc.table reloadData]; 

然而,似乎viewControllers的NSArray的是空的。当您注销时,是否有另一种方法可以重新设置所有内容?

我目前的应用程序的问题是,当我有一个用户登录并使用应用程序。他注销并且有新用户登录,新用户仍然可以在UITableView中看到之前的用户历史记录。这就是为什么我想在用户注销时跨越UITabBarController中的三个UIViewController清除此内容的原因:

回答

0

你会检查self.parentViewController的值吗?我不确定它是否返回标签栏控制器。

相反self.parentViewController.viewControllers的,做

self.tabBarController.viewControllers 
+0

我认为这应该工作..现在的问题是,在标签栏中的三个UIViewController是在UINavigationController ..所以如何访问UINavigatioNController的UIViewController – adit 2011-06-10 05:54:33

+0

UINavigationController有两个属性可以帮助你。 rootViewController和visibleViewController。 visibleViewController会给你屏幕上的一个,而rootViewController会给你最下面的一个。这是一个到UINavigationController文档的链接。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html – 2011-06-11 22:14:48

+0

通过给我这个[tabBarViewController isKindOfClass:[UINavigationController class]] – ravoorinandan 2011-10-13 10:36:42

0

定义在AppDelegate中,并在应用程序启动创建TabController通过代码表查看该数组。

现在用您的注销按钮将数据列表或视图源设置为零;

+0

检查当我注销我是只是呈现登录页面的ModalView ..我不知道如何在应用程序委托中执行此操作 – adit 2011-06-10 05:50:08

+0

您是否知道如何实现委托方法? 你可以在你的LoginViewController中定义一个委托方法,并在你的根视图控制器中实现一旦登录屏幕显示清除表视图数据源为零之前发生LogOut调用; – 2011-06-10 05:53:20

+0

是的,我确实有一些代表..我最初会使用这种方法。但是由于注销按钮实际上是从UITabBarController中的一个UIViewController显示的,所以委托会去那里而不是RootViewController – adit 2011-06-10 06:49:17