2011-12-04 52 views
0

我們有一個標籤欄+導航控制項目。我們通過界面生成器創建了一個標籤欄,並通過界面生成器將所有標籤項添加到標籤欄控制器。 我們的應用程序有一個登錄屏幕,我們在開始時顯示爲一種模式形式。一旦用戶通過身份驗證,登錄屏幕將被解除(使用dismissModalScreen)並顯示MainWindow。這一切工作正常。在iPhone應用程序中註銷時刷新tabbarcontroller視圖

現在,我們有一個註銷選項,點擊我們應該顯示登錄屏幕。我們也能夠證明這一點。但問題是,一旦用戶再次被認證,我們希望所有的屏幕都被新鮮加載。目前,所有屏幕保持其狀態並保留以前的數據。

我們試圖做的是:

[AppDelegate中tabBarController發佈];

AppDelegate.tabBarController = nil;

我們試過釋放tabBarController並將其設置爲nil。但是一旦顯示視圖,我們就無法選擇任何選項卡,並且視圖爲空白。

我們需要的是:

一旦在第二次的用戶登錄,如何釋放並重新加載每個視圖 - 控制它們的TabBar的一部分。

您的幫助將不勝感激。

回答

0

我們找到了一條出路。我們現在正在做的是,一旦用戶重新登錄,我們將釋放視圖控制器並重新創建它們並將其設置回uitabbar。

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

----創建新控制器

的UIViewController viewController2 = [[UIViewController中的alloc] initWithNibName:@ 「viewController2」 束:無]自動釋放];我們可以通過使用UIViewController來實現這個功能,但是我們可以通過使用UIViewController來實現這個功能,而不需要使用UIViewController來實現這個功能。

--create導航控制器

的UINavigationController navViewController2 = [[[UINavigationController的頁頭] initWithRootViewController:viewController2]自動釋放];

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

[arrControllers addObject:navViewController2];

[arrControllers addObject:navViewController3];

[AppDelegate.tabViewController setViewControllers:arrControllers];

這個改變後它工作正常。

我們遇到的唯一問題是,如果我們從數組中釋放所有對象,就會得到汽車。是否因爲當你釋放所有的對象時,第一個是RootViewController的控制器會被釋放?

謝謝