如何显示UIActionSheet以确认在导航视图中返回

时间:2012-05-13 03:00:46

标签: objective-c xcode navigation uiactionsheet

使用Xcode我有View A导航到View B.

按下Back UIBarButtonItem后,我正在尝试向用户显示UIActionSheet以确认导航以返回到View A.。

在代码中我需要做什么来阻止视图导航回来然后(取决于用户输入)向后移动或留在当前屏幕上?

2 个答案:

答案 0 :(得分:8)

以编程方式添加后退按钮。

例如。

UIButton *backBtn= [[UIButton alloc] initWithFrame:CGRectMake(0,0,54,30)];
 [backBtn addTarget:self action:@selector(backButtonPressed:)forControlEvents:UIControlEventTouchUpInside];
 UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:backBtn];   
[backBtn release];
 [[self navigationItem] setLeftBarButtonItem:backBarButton];
 [backBarButton release];

  //backButtonPressed is the selector for backBtn

然后从该选择器向您显示ActionSheet,并根据用户导航到上一个viewController或不。

要导航到上一页,请使用popViewMethod。

`

答案 1 :(得分:1)

您不应该为其他所有操作提供UIActionSheet。最好使用UIAlertView来实现此目的。根据Apple UIActionsheet指南: -

提供完成任务的其他方式。操作表允许您提供在当前任务的上下文中有意义的一系列选项,而无需在用户界面中将这些选择作为永久位置。

在完成潜在危险任务之前获得确认。操作表会提示用户考虑他们即将采取的步骤的潜在危险影响,并为他们提供一些替代方案。这种类型的通信在基于iOS的设备上尤为重要,因为有时候用户无需使用控件。

对于UIAlertView: -

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert View"
                                                            message:@"Do You want to go back to previous screen?"
                                                            delegate:self
                                               cancelButtonTitle:@"NO"
                                               otherButtonTitles:@"YES",nil];
[alertView show];
[alertView release];

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0) {
        NSLog(@"THE 'NO' BUTTON WAS PRESSED");
    }
    if (buttonIndex == 1) {
        NSLog(@"THE 'YES' BUTTON WAS PRESSED");
    }
}

在UINavigationController的后退按钮的操作上实现此功能。根据按下“YES”或“NO”的按钮,您可以允许导航。也符合UIAlerrtVIewDelegate协议。