uinavigationbar添加view - 试图在iOS中处理“后退”导航按钮操作




uinavigationcontroller bar color (5)

我需要检测用户何时点击导航栏上的“后退”按钮,以便在发生这种情况时执行某些操作。 我正在尝试手动将动作设置为这样的按钮,这样:

[self.navigationItem.backBarButtonItem setAction:@selector(performBackNavigation:)];

- (void)performBackNavigation:(id)sender
{
   // Do operations

   [self.navigationController popViewControllerAnimated:NO];
}

我首先将该代码放在视图控制器本身,但我发现self.navigationItem.backBarButtonItem似乎是nil ,所以我将相同的代码移动到父视图控制器,后者将前者推送到导航堆栈。 但我无法让它发挥作用。 我已经阅读了一些关于这个问题的帖子,其中一些人说需要在父视图控制器上设置选择器,但对我来说它无论如何都不起作用......我怎么可能做错了?

谢谢

https://code.i-harness.com


迅速

override func didMoveToParentViewController(parent: UIViewController?) {
    if parent == nil {
        //"Back pressed"
    }
}

didMoveToParentViewController的问题是,一旦父视图再次完全可见就会调用它,所以如果你需要在此之前执行某些任务,它将无法工作。

并且它不适用于驱动动画手势。 使用willMoveToParentViewController效果更好。

Objective-C的

- (void)willMoveToParentViewController:(UIViewController *)parent{
    if (parent == NULL) {
        // ...
    }
}

迅速

override func willMoveToParentViewController(parent: UIViewController?) {
    if parent == nil {
        // ...  
    }
}

使用VIewWillDisappear方法尝试使用此代码来检测按下NavigationItem的后退按钮:

-(void) viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) 
    {
        // Navigation button was pressed. Do some stuff 
        [self.navigationController popViewControllerAnimated:NO];
    }
    [super viewWillDisappear:animated];
}

或者有另一种方法来获取导航BAck按钮的动作。

为后退按钮的UINavigationItem创建自定义按钮。

对于Ex:

在ViewDidLoad中:

- (void)viewDidLoad 
{
    [super viewDidLoad];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(home:)];
    self.navigationItem.leftBarButtonItem=newBackButton;
}

-(void)home:(UIBarButtonItem *)sender 
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

斯威夫特:

override func willMoveToParentViewController(parent: UIViewController?) 
{
    if parent == nil 
    {
        // Back btn Event handler
    }
}

设置UINavigationBar的委托,然后使用:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
    //handle the action here
}

这是 Objective-C版本答案:

Objective-C的

- (void)didMoveToParentViewController:(UIViewController *)parent{
    if (parent == NULL) {
        NSLog(@"Back Pressed");
    }
}




selector