ViewWillDisappear中的UIAlertView

时间:2011-12-05 09:48:13

标签: objective-c ios xcode uinavigationcontroller

当用户按下UINavigationController视图上的Back-Button时,我想显示带有2个选项的UIAlertView。一个选项(OK)允许用户返回(到前一个屏幕),另一个选项(Cancel)将保留在当前控制器上。

我在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];

}

问题是,在我按下Back后,视图立即跳转到previos屏幕并在此屏幕上显示UIAlertView。

在UIAlertView回调方法中,我使用了以下编码,但没有任何反应(我认为这是因为我已经在上一个视图中已经出现了这一点):

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

BR, mybecks

2 个答案:

答案 0 :(得分:6)

当被叫viewWillDisappear时,为时已晚。导航控制器已经解除了视图控制器。

相反,您需要拦截后退按钮触摸事件。您可以通过多种方式执行此操作 - 您可以使用自定义后退按钮显示UIAlertView。或者您可以使用UINavigationBarDelegate,其中navigationBar:shouldPopItem:方法。

答案 1 :(得分:0)

在后退按钮方法中编写UIAlertView的代码,当您单击后退按钮时,它只显示警报,当您单击按钮时,它只需调用clickedbuttonindex:方法,在此方法中您只需调用查看你想要的。

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



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