2011-07-04 7 views
4

最初のコントローラがviewcontrollerであるビューベースのアプリケーションを作成しています。ログイン後に次のビューがタブバーコントローラであり、そのタブバーに2つのタブバーアイテムがあります。 これまですべて正常に動作します。今、これらの2つのビューを切り替えると、、viewDidUnloadが呼び出されず、前のタブがクリックされました。viewDidUnload、viewWillDisappearがtabBarContollerで呼び出されていません

P.S.私はデフォルト通知でviewwillAppearが呼び出されていません。問題が何であるか分かりません。私の質問ではっきりしていることを願っています。

+0

UITabBarControllerのビューを前面ビューにするために何を呼びますか? – ThomasW

+0

あなたは(BOOL)アニメーションを忘れましたか? – sturza

+0

これに似た問題があり、私の答えはここにあります:http://stackoverflow.com/a/33701499/1035899 – c0d3Junk13

答えて

6

まず、UITabBarControllerでビューを切り替えると、ビューが実際にアンロードされないため、viewDidUnload関数は呼び出されません。だから、これは正常です。

ボックスの外で作業する必要があるものは、viewWillAppear/viewDidDisappearです。しかし、キャッチがあります。 ビューの表示方法によっては、viewWillAppear/viewDidDisappearがフレームワークによって呼び出されないことがあります。たとえば、ビューをサブビューとして追加すると、これが発生しますが、さらに多くのケースがあります。私はあなたのタブバーをどのように表示するのか分からないので、それについてもっと具体的なことは言えません。

これを修正することをお勧めします簡単な解決策は、あなたのタブバーコントローラーデリゲートのtabBarController:didSelectViewController:セレクターをオーバーライドしています。そこから独自のロジックを実装したり、viewDidDisappearに電話をかけたりできます。

+0

@ sergioはあなたの入力に感謝します。デフォルトの通知(私はvieWillAppearメソッドと同じ)を使用してviewDidDisappearを呼び出す必要があります。間違った方法で私は仮定します。正しい方法なら、私はそうすることができます。 – mrugen

0

UINavigationControllerがありますか?あなたは1つを参照していません。 UINavigationControllerを使用していない場合は、UITabBarControllerがtopViewControllerとして正しく設定されていない可能性があります。

1

MainWindow.xibにTabBarコントローラを配置する必要があります。

まず、あなたがこのようなあなたのRootViewControllerを追加しますloginscreenあなたが表示さ:

[self.window addSubview:self.rootview.view]; 

とログインが完了すると、あなたはメインウィンドウからあなたRootViewControllerを削除して、このようなメインウィンドウでTabBarControllerを追加することができます。

[self.rootview.view removeFromSuperview]; 
    [self.window addSubview:self.tabBarController.view]; 
関連する問題