0

A と B の 2 つのタブを持つタブ バー コントローラーがあるとします。ここで、A はナビゲーション コントローラーです。

ユーザーが A にいる場合、ユーザーは A1 をプッシュしてから A2 をプッシュできます。これらは両方ともビュー コントローラーです。A2 の戻るボタンは、以下を実行します。

[self.navigationController popViewControllerAnimated:YES];

これにより、A2 で dealloc メソッドが正しくトリガーされます。

ユーザーが A2 にいて、タブ B に切り替えた場合、A2 で dealloc メソッドを呼び出す必要があります。したがって、TabBarController に次のメソッドを実装しました。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    UINavigationController *nc = (UINavigationController*)tabBarController.selectedViewController;
    [nc popToRootViewControllerAnimated:YES];

    return YES;
}

しかし、このフローでは A2 の dealloc メソッドは呼び出されません! A2 から A1 へのポップが機能するのに、タブを変更しても View Controller の割り当てが解除されない可能性はありますか?

ヒントをありがとう!

ダン

4

2 に答える 2

0

didSelectViewControllerタブコントローラーが目的のタブに切り替わる前にトリガーされるようです。したがって、メソッドを実行すると、popToRootViewControllerAnimatedすべてのビュー コントローラーが正しくポップされますが、現在アプリによって描画されているため、表示されているコントローラーを実際に解放することはできません。

私の結果を達成するために、私は次の解決策を考え出しました。viewDidAppear各タブの最初のView Controllerに対応するすべてのView Controllerのメソッドで、実行しますpopToRootViewControllerAnimated(すべてNavigation Controllerです)。

于 2013-09-01T15:37:59.647 に答える