【问题标题】:Xcode: Detecting when a navigation controller implemented "back button" is pressedXcode:检测何时按下导航控制器实现的“后退按钮”
【发布时间】:2016-04-29 05:34:57
【问题描述】:

场景

我有一个带有导航控制器的应用程序。当导航控制器将另一个控制器压入堆栈时,屏幕左上角会显示返回按钮“

我需要什么

我需要一些类似的东西(伪代码)...

-(void)detectedBackButtonWasPushed {

    NSLog(@"Back Button Pressed");

    //Do what I need done

}

问题

因为这个按钮是由导航控制器创建的,而我没有在情节提要中创建这个按钮,如何让后退按钮“连接”到这样的方法?

我为 Oleg 尝试过的示例

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

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

    if (viewController == vc) {

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

这是我应该做的吗?因为这不起作用。

【问题讨论】:

    标签: ios uinavigationcontroller


    【解决方案1】:

    使用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"); 
    }
    

    【讨论】:

    • 否定。你是对的,我可以检测到屏幕何时消失。问题是我有额外的功能(取消隐藏底部的标签栏)必须在屏幕消失之前发生。否则,标签栏在屏幕消失后会继续隐藏。这破坏了我的应用程序导航。我该如何做到这一点?
    • UINavigationControllerDelegate 看看。并尝试使用 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
    • 我会为你设置问题
    • 我已经添加了我尝试过但不起作用的代码。
    • 您是否正确使用了委托?没有任何警告等等?
    【解决方案2】:

    以前,我通过将 navigationBar leftItem 设置为带有自定义选择器的后退按钮来解决此问题,该选择器会关闭视图以及它需要执行的任何其他操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多