2012-02-23 7 views
0

私はタブバーMainViewControllerをいくつか持っていて、最初はView 1で、最大3人または4人の子供のスタックを持つナビゲーションコントローラです。最後のタブバーボタンはSettingsViewControllerで、その中に 'Logout'と似た機能があり、AppDelegateのメソッドを呼び出してMainViewControllerを削除し、ユーザーをログインページに戻します。あるView 1タブバーのナビゲーションコントローラをポップアップ

SettingsViewControllerにログアウトボタンを押すと、私はAppDelegateは(も行われる)ログオンビューに戻って、ユーザを送る、(私がやった)View 1ように選択されたタブを設定するだけでなく、popToRootViewController私は苦労しているビット。

tabBarのviewControllersプロパティを使用してインデックス0のビューコントローラへの参照を取得しようとしましたが、正しく実装されていない限り正しい方法ではありません。

私の最も最近の試み:

// Fine 
mainViewcontroller.tabBarController.selectedIndex = 0; 

// Not so fine 
NSArray *allViewControllers = [mainViewcontroller.tabBarController viewControllers]; 
View1 *vc = [allViewControllers objectAtIndex:0]; 
[vc.navigationController popToRootViewControllerAnimated:NO]; 

ちょうどタブ内のすべてのビューコントローラを反復処理と同じように動作するようには思えないルートに飛び出る別の試み:

for (UIViewController *viewController in mainViewcontroller.tabBarController.viewControllers) 
{ 
    [viewController.navigationController popToRootViewControllerAnimated:NO]; 
} 

缶誰も助けてくれる?

+0

ビュー1にUINavigationControllerがありますか? – bontoJR

+0

これは、View 1の追加のView Controllerをプッシュするものです。ログアウトすると、そのナビゲーションコントローラが最初にポップされます。 – Greg

+0

あなたはそれをどのように正確に実装していますか?あなたは特定のビューコントローラクラスにアクセスするviewControllerをキャストしようとしましたか? –

答えて

0

私は質問に貼り付けたものと全く同じコードを使用しています。IBの代わりにプログラムでタブバーコントローラを再作成したときに見つけました。

0

ポップバックしようとしているビューコントローラがメモリから(一時的に)パージされている可能性があると考えましたか?表示されていないタブのビューコントローラは、メモリが不足するとシステムからメモリから削除することができます。

これを解決するには、selectedIndexの設定時に現在のメソッドを停止します。しかし、以前は、アプリがルートにポップバックする必要があることを示すフラグ、つまりBool shouldPopBackToRoot = trueを設定していました。

次に、viewControllerのviewDidAppearでは、このフラグをチェックしてpopBackToRootが必要かどうかを確認し、そうであればviewControllerのviewDidAppearからpopToRootViewControllerを実行します(shouldPopBackToRootをfalseにリセットすることを忘れないでください)。

関連する問題