2011-10-24 11 views
1

私は、ルートビューコントローラとしてUITabBarControllerを持つ自分のiPhoneアプリケーションでパスコード機能を実装しています。アプリがバックグラウンドに入るとき、私はそうのように、すべてのものtabBarControllerからモーダルパスコードのViewControllerを表示することで、ほとんどの状況に大きな作業を持っている:アプリはすでにモーダルビューコントローラ際に表示されたときにパスコードViewControllerモーダルビューからのプレゼンテーション

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    if ([[NSUserDefaults standardUserDefaults] valueForKey:kPasscodeStringKey]) { 

     PasscodeEntryVC *passcodeView = [[PasscodeEntryVC alloc] init]; 
     UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:passcodeView]; 
     [tabBarController presentModalViewController:nav animated:NO]; 
    } 
} 

私の問題が来ますそれは背景に入ります。その後、パスコードビューは表示されません。これを行う正しい方法は何でしょうか? tabBarControllerにメッセージを送信してビューを表示するのではなく、最初に現在のビューが何であるかを確認してから、そのパスコードを表示する必要がありますか?もしそうなら、これはどのように行われますか?ありがとう。

答えて

0

まず、releasepasscodeViewとナビゲーションコントローラnavがないため、メモリがリークしています。

第2に、モーダルビューを表示または終了するたびに更新される単純な変数BOOLを保持することができます。モーダルビューの場合は、applicationDidEnterBackground:メソッドでdismissModalViewController:animated:を呼び出してください。

また、フロントビューコントローラーを[self.navigationController.topViewController class]でチェックすることもできますが、これは信頼できないことがわかりました。

+0

ありがとうございました。私はARCを使用しているので、メモリは正常です。将来的には、わかりやすくするためにretain/releaseコードを投稿します。 どうすれば、既存のモーダルビューの上にモーダルパスコードビューを表示したいのですか?現在のビューコントローラへの参照を取得するための迅速な方法は、それはモーダルであるかどうかですか? –

0

私が通常行っていることは、モーダルビューコントローラを提示して、UIApplicationWillResignActiveNotification通知が送信されるたびにモーダルビューコントローラを閉じることができるようにすることです。私のアプリケーションデリゲートでは、まったく同じように設定しましたあなた。

ただし、上記のモーダルビューコントローラを無効にするときは、animated:に設定してNOに設定してパスコードビューコントローラを表示する必要があります。

関連する問題