添加自定义后退按钮现在导致转到RootViewController时崩溃

时间:2014-11-04 16:13:50

标签: ios objective-c uinavigationcontroller

我在我的应用程序中使用标准导航控制器,但最近我不得不进行更改,只有当用户按下导航栏上的后退按钮时才需要进行更改。所以为了抓住这个,我试图创建一个自定义后退按钮来捕捉它的选择器。

现在显然导航栏已经有一个后退按钮,所以我基本上只是试图覆盖/替换它。我没有做任何特别的事情,只是分配它并将其设置为导航项。

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked)];
[self.navigationItem setLeftBarButtonItem: backBarButtonItem];

然而问题是在按下几次后(此屏幕在导航中有一些深度),当我支持rootViewController时,我得到一个例外。我猜它是因为我在已经存在后退按钮时添加了一个后退按钮,不知何故导航已经摆脱了怪癖,但我不知道该改变什么。

1 个答案:

答案 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
}