2011-12-05 9 views
2

ユーザーがUINavigationControllerビューの[戻る]ボタンを押すと、2つのオプションを使用してUIAlertViewを表示します。 1つのオプション(OK)を使用すると、ユーザーは前の画面に戻り、もう1つ(キャンセル)は現在のコントローラーに残ります。 UIAlertView in viewWillDisappear

は、私は私のviewWillDisappearに(私はそうにこちらをご覧ください)、次のコードを実装:

-(void) viewWillDisappear:(BOOL)animated{ 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { 
     // back button was pressed. We know this is true because self is no longer 
     // in the navigation stack. 


     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"All Data will be lost" 
                 message:@"You must be connected to the internet to use this app." 
                 delegate:self 
               cancelButtonTitle:@"Cancel" 
               otherButtonTitles:@"OK", nil]; 
     alert.tag = 1; 
     [alert show]; 
     [alert release]; 
    } 
    [super viewWillDisappear:animated]; 

} 

問題は、私は戻る押した後、ビューはこの上&過去の画面ウントdispayにすぐにジャンプしていること、ですUIAlertViewを表示します。 (私はすでに前のビューに、この時点できた原因、これはあると思います)私は、次のコードを使用しますが、何も起こりませんUIAlertViewのコールバックメソッドで

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if(buttonIndex == 1) 
       NSLog(@"back"); 
//Go Back ... 
} 

BR、 mybecks

答えて

6

viewWillDisappearが呼び出されるまでには、それは遅すぎます。ナビゲーションコントローラはすでにビューコントローラを終了しています。

代わりに、戻るボタンのタッチイベントを代行受信する必要があります。これはさまざまな方法で行うことができます。あなたのUIAlertViewを表示するカスタムの戻るボタンを使用できます。またはnavigationBar:shouldPopItem:メソッドを持つUINavigationBarDelegateを使用することもできます。

+0

作業部分。しかし、以前のものから現在のものにナビゲートしたいときにエラーが発生すると、コントローラを手動で処理することはできません。 "戻る" - ナビゲーションを処理するUINavigationControllerがない場合。このソリューションはチャームのように機能します。 – mybecks

0

バックボタンメソッドでUIAlertViewのコードを記述し、戻るボタンをクリックすると警告が表示されます。ボタンをクリックすると、単にclickedbuttonindex:メソッドが呼び出されます。このメソッドでは、欲しいです。

-(IBAction)back-button{ 
    //alert 
} 



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    //call the view 
}