2012-04-17 46 views
0

在我的應用程序中,我有一個登錄屏幕,我在模擬啓動時呈現。成功登錄後,用戶被重定向到一個UITabBarController,該UITabBarController具有五個UINavigationController(用於標籤)。刪除ViewController

在一個選項卡上,我有一個「註銷」按鈕,以便用戶重定向回登錄屏幕。 這工作正常。

但我想要做的是每次用戶登錄時加載UITabBarController。這意味着,不應該重用UITabBarController。現在,標籤中的內容(我從web加載數據)保持不變,也是在新登錄完成時。

如何釋放/彈出/無UITabBarController與它的UINavigationcontrollers?


是我迄今爲止嘗試:

多數民衆贊成在我把用戶返回到登錄屏幕點時,他按下了「退出」按鈕:

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

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

任何人可以幫助我好嗎?


編輯: That's我怎麼添加的UITabBarController。我這樣做,當用戶點擊登錄按鈕:

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

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

EDIT2:我解決它。我在做什麼是當用戶點擊註銷按鈕,我從應用程序委託調用導航控制器,並使用它來推動登錄viewcontroller。

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

回答

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]; 
+0

我在這裏沒有窗口對象;我需要它來訪問子視圖嗎? – user944351 2012-04-17 11:46:16

+0

你可以發佈你的代碼添加UITabBarController嗎? – TompaLompa 2012-04-17 11:53:40

+0

請參閱我編輯 – user944351 2012-04-17 13:33:01

0

我不會這樣做。因爲從子視圖管理(釋放/無)父視圖不是一種好的做法。

  1. init在應用程序啓動後顯示tabbar控制器。
  2. 如果用戶未登錄,則顯示loginviewcontroller。如果已經登錄不需要。
  3. 成功登錄後發佈通知並捕獲它所需的地方。
  4. 如果用戶點擊註銷,清除用戶憑據,用戶相關數據,並再次呈現loginviewcontroller。
+0

這基本上是我現在正在做的方式,但主要問題是tabbarcontroller沒有作爲註銷後的新實例加載... – user944351 2012-04-18 06:36:08

0

我想從appDelegate中添加和刪除模態視圖控制器和tabbarcontroller。

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

只有loginviewcontroller是在appdelegate中初始化的,帶有子視圖的tabbarcontroller是在loginviewcontroller的viewdidload中初始化的..你知道我的意思嗎? – user944351 2012-04-18 06:48:32

+0

我知道你的意思,但我建議最好從appDelegate進行初始化和刪除。 – ader 2012-04-18 08:27:09