监听导航控制器中的“返回”

时间:2012-05-25 15:22:40

标签: objective-c ios xcode ios5 uinavigationcontroller

我为这个问题找到了许多旧的答案,但它们都已有2年多了。

我想为左键添加侦听器 - “后退”按钮。我想显示UIAlertView然后等待响应 - 是/否。

是否可以在较新的SDK中使用?

4 个答案:

答案 0 :(得分:3)

是的,您可以通过以下方式捕捉和处理后退按钮事件来完成此操作:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressed:)];

您可以在方法中显示提醒:

- (void)backButtonPressed:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notice" message:@"Going back?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok"];
[alert show];
}

然后在UIAlertDelegate方法

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) { // Button index: Cancel = 0; Ok = 1; 
        [self.navigationController popViewControllerAnimated:YES];
    }
}

答案 1 :(得分:2)

您可以“欺骗”系统以使用您自己的箭头形状“后退”按钮显示自定义UINavigationBar - 这样您就可以完全操纵行为而不仅限于默认行为。

答案 2 :(得分:1)

这是一种方法。我不确定这是否是唯一的方法,但这对我有用:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    if (animated) {
        NSLog(@"User pressed Back button");

    }
}

答案 3 :(得分:0)

目前还不是很清楚你想做什么。听什么对象?屏幕上的一个或导航堆栈中的一个但屏幕外? UIAlertView的目的是什么?您需要用户的回复吗?回应后会发生什么?

可能有一种方法可以将KVO添加到导航栏属性,但我认为更好的方法(如果您的目标是5.0及更新版本)将使用自定义Segue类。使用自定义分段,您可以完全自定义整个过渡过程。如果你想看到一些有用的东西,请在这里评论你正在寻找的行为的具体细节,我将回答一个例子。

另一种选择可能是子类化UINavigationController,它也可以用5.0和更高版本,但我还没有尝试过,因为我认为它可能会打开一堆蠕虫。

如果您的目标是5.0之前,我认为最好的方法是使用自己的后退按钮和自定义行为。