0

UITabViewController実行していUINavigationControllerます。各タブTableViewには、アプリケーション ツリーのルートである異なる があります。

テーブルの項目をクリックすると、次のレベルに移動し、別の詳細が表示され、TableViewまだ画面に表示されています。1つのことを除いて、完全に機能します。あるタブで詳細を表示している場合、別のタブに切り替えてもう一度戻っても詳細が表示されます。私が達成したいのは、タブを離れた後にタブをリセットすることです。TabBarNavigationBar

何かを入れる必要があるとviewDidUnload思いますが、正しい解決策が見つかりませんでした。

お役に立てれば幸いです。

4

2 に答える 2

4

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

行う

[viewController.navigationController popToRootViewControllerAnimated:YES];

これにより、タブが選択されるたびに、タブのビュー コントローラーがルート ビューに移動します。

メイン ウィンドウのビュー コントローラー (タブ バー コントローラー) のインスタンスをアプリケーション デリゲートのままにしておくことはまったく問題ありません。

追加する必要があるのは、次のように、デリゲートまたはその他の初期化されたクラスをタブ バー コントローラーのデリゲートに設定することです。

myTabBarController = [UITabBarController alloc ...
myTabBarController.delegate = self; // the app delegate will be also the tab bar delegate

アプリ デリゲートで、次のメソッドをアプリ デリゲートに追加します。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    [viewController.navigationController popToRootViewControllerAnimated:YES];
}

タブ バー コントローラーは、タブが選択されるたびにこのメソッドを呼び出します。UITabBarControllerDelegateまた、アプリケーション デリゲートに次の方法で確認させることもできます。

@interface PSAppDelegate : UIResponder <UITabBarControllerDelegate>

これにより、アプリデリゲートがプロトコルでメソッドを宣言する必要がある、または宣言する可能性があることがコンパイラに通知され、このメソッドの非常に便利な自動補完も提供されます。

于 2012-07-12T14:36:20.597 に答える
0

これを行う 1 つの方法は、tabviewcontroller に関連付けられたビュー コントローラーを取得してから、新しいオブジェクトを作成することです。

self.tabBarController?.viewControllers! タブバーのviewControllerの配列を取得します。私の場合、それらは UINavigationControllers ですが、何でもかまいません。次に、それに関連付けられた viewController を取得し、それをリセットします。

ナビゲーション コントローラーがない場合は、新しいビュー コントローラー オブジェクトを作成して、それを使用できます。

以下は私の場合の解決策です(navcontrollerを使用)

 let vc = self.tabBarController?.viewControllers![0] as! UINavigationController
    let newVC = YourViewControllerClass()
    vc.viewControllers[0] = newVC as UIViewController

これにより、古い (入力された) VC が新しいものに置き換えられます。

于 2016-03-01T09:32:50.647 に答える