我为这个问题找到了许多旧的答案,但它们都已有2年多了。
我想为左键添加侦听器 - “后退”按钮。我想显示UIAlertView然后等待响应 - 是/否。
是否可以在较新的SDK中使用?
答案 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之前,我认为最好的方法是使用自己的后退按钮和自定义行为。