我在我的应用程序中使用标准导航控制器,但最近我不得不进行更改,只有当用户按下导航栏上的后退按钮时才需要进行更改。所以为了抓住这个,我试图创建一个自定义后退按钮来捕捉它的选择器。
现在显然导航栏已经有一个后退按钮,所以我基本上只是试图覆盖/替换它。我没有做任何特别的事情,只是分配它并将其设置为导航项。
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked)];
[self.navigationItem setLeftBarButtonItem: backBarButtonItem];
然而问题是在按下几次后(此屏幕在导航中有一些深度),当我支持rootViewController时,我得到一个例外。我猜它是因为我在已经存在后退按钮时添加了一个后退按钮,不知何故导航已经摆脱了怪癖,但我不知道该改变什么。
答案 0 :(得分:0)
一般来说,更换UINavigationController
的后退按钮不是一个好主意,导致不良行为......
如果您需要在视图再次关闭之前执行某些操作,则可以在viewWillDisappear
中实现所需的功能。
如果您绝对想要更换后退按钮,则应采用不同的方法:
在UIViewController
上写一个类别,类似于:
<强>的UIViewController + BackButton.h 强>
@interface UIViewController (BackButton)
- (void)setBackButton;
- (void)didPressBackButton;
@end
<强>的UIViewController + BackButton.m 强>
@implementation UIViewController (CustomBackButton)
- (void)setBackButton
{
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(goBack)];
[self.navigationItem setLeftBarButtonItem:backBarButtonItem];
}
- (void)goBack
{
[self.navigationController popViewControllerAnimated:YES];
if ([self respondsToSelector:@selector(didPressBackButton)])
{
[self didPressBackButton];
}
}
@end
这样,您可以在viewDidLoad
中的视图控制器中轻松设置自定义后退按钮,并实施方法didPressBackButton
以执行自定义操作。
#import UIViewController+BackButton.h
- (void)viewDidLoad
{
[super viewDidLoad];
[self setBackButton];
}
- (void)didPressBackButton
{
// your code here
}