0

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

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

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

UINavigationcontrollers を使用して UITabBarController を解放/ポップ/nil するにはどうすればよいですか?


私がこれまでに試したこと:

それは、ユーザーが「ログアウト」ボタンを押したときに、ユーザーをログイン画面に戻すポイントです。

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

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

誰でも私を助けてもらえますか?


編集:それがUITabBarControllerを追加する方法です。ユーザーがログインボタンをクリックしたときにこれを行います。

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

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

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

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

3 に答える 3

0

スーパービューから削除してから解放しようとしましたか? そして、新しいViewControllerを追加しますか?

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];
于 2012-04-17T11:36:58.107 に答える
0

モーダル ビュー コントローラーとタブバー コントローラーの両方を appDelegate に追加および削除します。

[myAppDelegate addLoginViewController];
[myAppDelegate removeLoginViewController];
[myAppDelegate addTabBarController];
[myAppDelegate removeTabBarController];
于 2012-04-17T15:48:17.200 に答える
0

私はこの方法でそれをしません。親ビューをそのサブビューから管理 (リリース/nil) することは良い習慣ではないためです。

  1. アプリの起動後にタブバーコントローラーを初期化して表示します。
  2. ユーザーがログオンしていない場合は、loginviewcontroller を提示します。すでにログオンしている場合は必要ありません。
  3. ログインに成功したら、通知を投稿し、必要な場所にキャプチャします。
  4. ユーザーがログアウトをタップすると、ユーザー資格情報、ユーザー関連データが消去され、loginviewcontroller が再度表示されます。
于 2012-04-17T15:16:36.973 に答える