2012-04-17 13 views
0

私のアプリでは、起動時にモーダルに表示されるログイン画面があります。ログインに成功すると、ユーザーは5つのUINavigationController(タブ用)を持つUITabBarControllerにリダイレクトされます。ViewControllerを削除する

1つのタブでは、ユーザーがログイン画面にリダイレクトされるように、「ログアウト」ボタンがあります。 これはうまくいきます。

しかし、私がしたいのは、ユーザーがログインするたびにUITabBarControllerをロードすることです。つまり、UITabBarControllerを再利用しないでください。今のところ、新しいログインが行われたときにも、タブのコンテンツ(ウェブからデータを読み込む)は同じままです。

UITabBarControllerを/ pop/nilでUINavigationControllerでリリースするにはどうすればよいですか?


何私がこれまで試してみました:

を、彼は、「ログアウト」ボタンを押したときに、私は戻ってログイン画面にユーザーをプッシュするポイント厥:誰もが

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

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

を助けることができます私はどうですか?


編集:私はUITabBarControllerを追加する方法 That's。

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

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

EDIT2:私はそれを解決し、ユーザーがログインボタンをクリックしたときに、私はこれを行います。私がやっているのは、ユーザがログアウトボタンをクリックしたとき、私はアプリケーションデリゲートからナビゲーションコントローラを呼び出し、それを使ってログインviewcontrollerをプッシュします。

答えて

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

+0

UITabBarControllerを追加する場所にyoutコードを投稿できますか? – TompaLompa

+0

私のEDIT – user944351

0

私はこのようにはしません。サブビューからの親ビューの管理(リリース/無し)は良い方法ではないためです。

  1. アプリ起動後のinitとshow tabbarコントローラ。
  2. ユーザーがログオンしていない場合は、loginviewcontrollerが存在します。既にログオンしている場合は必要ありません。
  3. ログイン後、通知を送信して必要な場所をキャプチャします。
  4. ユーザーがログアウトしたときにユーザーの資格情報、ユーザーの関連データおよび現在のloginviewcontrollerをクリアした場合。
+0

を参照してください基本的に今私はそれをやっている方法ですが、主な問題は、tabbarcontrollerはログアウト後に新しいインスタンスとして読み込まれていないことです... – user944351

0

私は、モーダルビューコントローラとタブバーコントローラの両方をappDelegateから追加して削除します。

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

loginviewcontrollerのみがappdelegateで初期化され、そのサブビューを持つtabbarcontrollerはloginviewcontrollerのviewdidloadで初期化されます。 – user944351

+0

私はあなたが何を意味しているのか知っていますが、私はappDelegateの両方を初期化して削除する方が良いと提案します。 – ader