2

我找到了很多关于这个问题的旧答案,但它们都是 2 岁以上。

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

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

4

4 回答 4

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];
    }
}
于 2012-05-29T16:10:06.003 回答
2

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

于 2012-05-25T15:50:58.593 回答
1

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

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

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

    }
}
于 2012-05-25T15:29:09.647 回答
0

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

可能有一种方法可以将 KVO 添加到导航栏属性,但我认为更好的方法(如果您的目标是 5.0 和更高版本)是使用自定义 Segue 类。使用自定义转场,您可以完全自定义整个过渡过程。如果您想查看实际操作,请在此处评论您正在寻找的行为的细节,我会用一个例子来回应。

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

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

于 2012-05-29T15:43:45.127 回答