2011-12-05 3 views
2

사용자가 내 UINavigationController보기에서 뒤로 단추를 누르면 두 가지 옵션이있는 UIAlertView를 표시하려고합니다. 하나의 옵션 (OK)은 사용자가 이전 화면으로 돌아갈 수있게하며, 다른 옵션 (취소)은 현재 컨트롤러에 남아 있습니다. 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]; 

} 

문제는 내가 돌아 누른 후, 뷰가이에 previos 화면 싶게 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

부분적으로. 하지만 이전에 있던 컨트롤러에서 현재의 컨트롤러로 돌아가고 싶을 때 오류가 발생합니다. 컨트롤러를 수동으로 처리하는 것은 허용되지 않습니다. "back"- 네비게이션을 처리하는 UINavigationController가 없다면. 이 솔루션은 매력처럼 작동합니다. – mybecks

0

UIAlertView에 대한 코드를 뒤로 단추 방법으로 작성하고 뒤로 단추를 클릭하면 경고가 표시되고 단추를 클릭하면 단순히 clickedbuttonindex: 메서드가 호출되며이 메서드에서는 그냥 필요.

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



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