Xcode:检测导航控制器实现“返回按钮”被按下

5

场景

我有一个带有导航控制器的应用程序。当导航控制器将另一个控制器推入堆栈时,在屏幕的左上角会显示返回按钮“<(上一个视图控制器的标题)”。

我的需求

我需要类似于以下伪代码的东西...

-(void)detectedBackButtonWasPushed {

    NSLog(@"Back Button Pressed");

    //Do what I need done

}

问题

因为这个按钮是由导航控制器创建的,而我没有在故事版中创建这个按钮,我如何将返回按钮“连接”到像这样的方法?

我尝试过的示例

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"notification"];

    if (viewController == vc) {

        NSLog(@"BACK BUTTON PRESSED");
    }
}

这样做是正确的吗?因为这样不起作用。

2个回答

4
使用viewWillDisappear来检测此情况。
-(void) viewWillDisappear:(BOOL)animated 
{ 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) 
    { 
        [self backButtonPressed]; 
        [self.navigationController popViewControllerAnimated:NO]; 
    } 

    [super viewWillDisappear:animated]; 
} 

-(void)backButtonPressed 
{ 
   NSLog(@"YEA"); 
}

1
否定。你说得对,我可以检测到屏幕消失的时候。问题在于,我有额外的功能(在底部显示选项卡栏)必须要在屏幕消失之前发生。否则,在屏幕消失后选项卡栏将继续被隐藏。这会破坏我的应用程序导航。我该如何解决这个问题? - Brandon A
浏览一下UINavigationControllerDelegate。并尝试使用- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated。 - Oleg Gordiichuk
我已经添加了我的尝试但不起作用的代码。 - Brandon A
你是否正确使用了委托?没有任何警告之类的吗? - Oleg Gordiichuk
让我们在聊天中继续这个讨论 - Oleg Gordiichuk
显示剩余2条评论

0

之前,我通过设置navigationBar的leftItem为带有自定义选择器的返回按钮来解决这个问题,该选择器会关闭视图并且执行其他必要的操作。

我还建议查看后退按钮项并添加一个在触摸时调用target:self的目标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接