3

アプリの 5 つのタブのうち 4 つにナビゲーション コントローラーを備えたタブ バー アプリがあります。アプリ内に「アプリのリセット」機能があり、すべてのデータなどを消去します...また、すべてのビューコントローラーをトップビューに戻すことも望んでいます。単一のナビゲーション コントローラーに対して popToRootViewControllerAnimated を使用してルートにポップする方法は知っていますが、各タブですべてのビュー コントローラーをポップすることは可能ですか?

4

5 に答える 5

11

配列内のコントローラーがUINavigationControllerのようなものである場合、tabBarControllerのviewControllers配列を列挙してルートビューコントローラーにポップする必要があります-

for(UIViewController *viewController in tabBarController.viewControllers)
{
    if([viewController isKindOfClass:[UINavigationController class]])
       [(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
}
于 2013-01-15T17:54:57.687 に答える
1

ラフルの答えは完璧な解決策です。ただし、タブバーに 5 つ以上のタブがある場合は、「その他」タブが表示されます。このタブを明示的にリセットする必要があります (tabBarController.moreNavigationController を rootViewController にポップするだけです)。

コード例は次のとおりです。

for(UIViewController *viewController in tabBarController.viewControllers)
{
    if([viewController isKindOfClass:[UINavigationController class]])
       [(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
}
[tabBarController.moreNavigationController popToRootViewControllerAnimated:NO];

..

于 2013-12-25T22:16:19.120 に答える
0

もう 1 つのオプションは、NSNotifications を使用することです。モーダル ビュー (タイマーのスライド ショー) を閉じるときに、すべてのタブで popToRootViewController をトリガーする必要がありましたが、これがその方法を理解できる唯一の方法です。モーダル ビューの viewWillDissapear メソッドで NSNotification をトリガーし、閉じたい各ビューで応答しました。

于 2013-07-05T04:00:40.557 に答える