Ios 添加自定义后退按钮现在会导致转到RootViewController时崩溃
我在我的应用程序中使用了一个标准的导航控制器,但我最近不得不做一个更改,只有当用户按下导航栏上的“后退”按钮时才需要进行更改。所以为了捕捉这个,我试图创建一个自定义的后退按钮来捕捉它的选择器 现在很明显导航栏已经有了后退按钮,所以我基本上只是想覆盖/替换它。我没有做任何特别的事情,只是分配它并将其设置为导航项Ios 添加自定义后退按钮现在会导致转到RootViewController时崩溃,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我在我的应用程序中使用了一个标准的导航控制器,但我最近不得不做一个更改,只有当用户按下导航栏上的“后退”按钮时才需要进行更改。所以为了捕捉这个,我试图创建一个自定义的后退按钮来捕捉它的选择器 现在很明显导航栏已经有了后退按钮,所以我基本上只是想覆盖/替换它。我没有做任何特别的事情,只是分配它并将其设置为导航项 UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBa
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked)];
[self.navigationItem setLeftBarButtonItem: backBarButtonItem];
然而,问题是,在按下几次后,这个屏幕在导航中有一些深度,当我返回到rootViewController时,我得到一个异常。我猜这是因为我添加了一个后退按钮,而现在已经存在一个后退按钮,不知怎么的,导航变得不正常了,但我不知道该做什么改变 更换UINavigationController的后退按钮通常不是一个好主意,我想,这会导致不希望出现的行为
如果您需要在视图再次离开屏幕之前执行一些操作,您可以在ViewWillEnglish中实现所需的功能
如果您确实想更换“后退”按钮,则应采取不同的方法:
在UIViewController上编写一个类别,类似于:
UIViewController+BackButton.h
UIViewController+BackButton.m
这样,您就可以在viewDidLoad中的视图控制器中轻松设置自定义后退按钮,并实现方法didPressBackButton来执行自定义操作
#import UIViewController+BackButton.h
- (void)viewDidLoad
{
[super viewDidLoad];
[self setBackButton];
}
- (void)didPressBackButton
{
// your code here
}
异常说明了什么?你得到了什么样的异常?我们需要看看如果设置了一个all exceptions断点并启用了zombies,会发生什么情况,然后告诉我们错误是什么,以及是否是一个释放的对象收到了消息。用后退按钮代替系统按钮是其他人没有做过的事情,所以我怀疑会是这样。期待看到发生什么。这只是一个执行错误访问backButtonClicked方法是什么?还有,点击的是什么?老鼠?不,那为什么叫它点击?为什么不叫它goBack或goToRootViewController呢。使名称具有描述性。我无法将我的更改添加到视图中,因为视图位于选项卡栏中,这些更改在切换选项卡时触发,导致我的更改在我不希望时触发。我只想在用户向后导航时触发它们。我还注意到,这个问题实际上与我的后退按钮无关,而是手动调用popViewController。我在屏幕上也有一个取消按钮,这个问题也会发生。
@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
#import UIViewController+BackButton.h
- (void)viewDidLoad
{
[super viewDidLoad];
[self setBackButton];
}
- (void)didPressBackButton
{
// your code here
}