2011-09-13 13 views
1

問題があります。私は、タブバーベースのアプリであるアプリに取り組んでいます。このアプリでは、新しいビューに移動したいときは[self.view addSubview:newVC.view]に電話します。 newVCは、表示したい新しいビューのビューコントローラです。また、以前のビューに戻る場合は[self.view removeFromSuperview]を使用します。タブバーベースのアプリケーションでViewDidAppearが呼び出されない

つまり、ナビゲーションコントローラはありません。今問題は、前のビューを更新したいということです。 [self.view removeFromSuperview]を使用しているので、前のビューのviewDidAppearは呼び出されないので、そのビューをリフレッシュする方法はありません。

私は、欠陥がありますが、その大規模なアプリケーションとナビゲーションコントローラを実装するために多くの時間がかかるので、この問題の解決策を見つけるのを助けてください。 viewDidLoadまたはviewDidAppear、またはサブビューから[self.view removeFromSuperview]を呼び出す際の以前のビューを呼び出すにはどうすればよいですか?

+0

私は '[self.view removeFromSuperview]'の前に '[super viewDidLoad]'を試すことができると思います。私はこれを試していないが、私はこれが動作すると思います –

+0

あなたは自分自身でviewDidLoadを呼び出すべきではありません。これは、ビューがロードされた後に呼び出されます。特にビューが実際にロードされていない場合、手動で呼び出すと恐ろしいことが起こります。 –

+0

親ビューコントローラの参照をサブビューに持ち込み、気にしたいことに特有の方法を呼び出すことで、それを操作するのはなぜですか? – Saran

答えて

0

はい、Sarahは以前のコントローラーの参照を「スタック」に保持する必要があると述べています。 スタックからコントローラをポップするときは、以前のコントローラで適切なメソッドを呼び出します。 確かにviewDidLoadを呼び出すべきではありません(実際のナビゲーションスタックからコントローラーをポップしたときには呼び出されません)UINavigationControllerviewWillAppearまたはviewDidAppearに電話することはできますが、viewRevealedなどの独自の方法を使用することをお勧めします(viewWillAppearまたはviewDidAppearからも呼び出すことができます)。 基本クラスをこのすべての機能を実装し、すべてのコントローラを基本クラスから派生させると便利です。それは次のようになります:

- (void) pushViewController:(BaseViewController *)baseController{ 
    [self.view addSubview:baseController.view]; 
    baseController.parentController = self; 
} 
- (void) pop{ 
    [self.view removeFromSuperview]; 
    [self.parentController viewRevealed]; 
} 
+0

おかげで多くのウラジミール。 – Aqueel

0

viewDidLoadpushViewControllerメソッドを使用してコントローラにジャンプした場合にのみメソッド呼び出しが実行されます。 removeFromSupreViewに電話すると、viewWillAppearメソッドが呼び出されます。ここでは、あるビューから別のビューをタブバー上に移動する場合は、UINavigationControllerMainwindow.xibに使用し、そのviewControllerをApp Delegateに接続する必要があります。