2011-09-27 14 views
6

私は、ユーザーが前のビューでボタンpopviewcontrollerがviewWillを呼び出さない

[self.navigationController popViewControllerAnimated:YES]; 

クリックされたときに、以前のビューを表示するには、次のコードを使用しています、私は初期化されたいくつかのことにviewWillAppearを上書きします。しかし、viewWillAppearが呼び出されていないようです。私はのviewDidLoad、viewWillAppear、viewDidAppearでのNSLogを入れて、唯一のviewDidAppearが呼び出されています。これは正常な動作ですか?はいの場合は、初期化を行うためにどのようなイベントを上書きする必要がありますか?ありがとうございました。

次のコードを使用してアプリケーションデリゲートにUINavigationalControllerをセットアップしました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    HomeViewController *hv = [[HomeViewController alloc] init]; 

    UINavigationController *navController = [[UINavigationController alloc] 
              initWithRootViewController:hv]; 

    // You can now release the itemsViewController here, 
    // UINavigationController will retain it 
    [hv release]; 

    // Place navigation controller's view in the window hierarchy 
    [[self window] setRootViewController:navController]; 


    [navController release]; 


    // Override point for customization after application launch. 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

UPDATE

わかりませんそれが遅くなっていたので、シミュレータでもう一度アプリを実行しようとし、そのはまだこの問題を持った後、昨夜起こったが、何、私はすべてを保存し、自分のコンピュータをシャットダウンすることを決めました。

今朝、私はプロジェクトをきれいにして構築し、それを実行して、開いたのXcodeに戻って自分のコンピュータを回して、私は問題は修正されており、-viewWillAppearが呼び出されます。私は何も変わらず、働いていました。私はNSLogを-willShowViewに追加しましたが、呼び出されませんでした。突然viewWillAppearのすべてが呼び出されている理由を私は知りません。

+0

手動で-viewWillAppearを呼び出してみましたか? – Ricky

+0

私は手動でviewWillAppearをどのように呼び出すのですか?私は[self.navigationController popViewControllerAnimated:YES]と呼ばれるビューからそれを呼び出すのですか?から? – atbebtg

+0

ええ、理想的には '-opopViewControllerAnimated:' – Ricky

答えて

8

あなたのナビゲーションコントローラのデリゲートが設定されていることを確認した後、そのviewWillAppear呼び出したいクラスのviewWillAppearを呼び出すために、この機能を使用します。

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [self viewWillAppear:animated]; 
} 
+0

私はこれを行い、willShowViewcontrollerは呼び出されていません。 – atbebtg

+0

はナビゲーションコントローラのデリゲートセットですか?このクラスはヘッダにを持っていますか? –

+0

はい、前のビューとpopViewControllerを呼び出すビューの両方で実行しようとしましたが、両方の場所で呼び出されていません。 – atbebtg

4

を私は非常に同じ問題をヒットしてきましたし、後いくつかのテストでは、popViewControllerAnimated:(AFNetworkingのネットワークレスポンスからの)viewDidAppearが親ビューで呼び出されていないブロックで呼び出すことが検出されました。 ここで私にとってうまくいった解決策は、代わりにメインスレッドで呼び出すことでした。

dispatch_async(dispatch_get_main_queue(), ^{ 
    // If not called on the main thread then the UI doesn't invoke the parent view's viewDidAppear 
    [self.navigationController popViewControllerAnimated:YES]; 
}); 
関連する問題