我需要检测用户何时点击导航栏上的"后退"按钮,以便在出现这种情况时执行一些操作.我试图手动设置这样一个按钮的操作,方法如下:

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

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

   [self.navigationController popViewControllerAnimated:NO];
}

我首先将代码放在视图控制器本身中,但我发现self.navigationItem.backBarButtonItem似乎是nil,所以我将相同的代码移到父视图控制器中,这将前者推到导航堆栈中.但我都没办法让它工作.我读过一些关于这个问题的帖子,其中一些帖子说需要在父视图控制器上设置 Select 器,但对我来说,它无论如何都不起作用...我做错了什么?

谢谢

推荐答案

使用VIewWillDisappear方法try 此代码,以检测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];
}

或者还有另一种方法来获取导航后退按钮的操作.

为后退按钮的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];
}

Swift :

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

Ios相关问答推荐

如何在react 本机模块中使用Bundle.main.Path()在SWIFT中导入assets资源

删除领域中的cartItem时出现问题

如何使用Xcode15.1在iMessage扩展模块中显示贴纸

保存和读取登录到 keys 串不工作 IOS swift

NSError 错误领域: "CBATTErrorDomain" 代码: 128 0x0000000282b111a0

实现 ListView Builder Widget Flutter 后退按钮不起作用

为什么@FetchRequest 在删除时不更新和重绘视图?

在 SwiftUI 中使用 .rotation3DEffect 在视图之间翻转

通过 Rosetta 打开模拟器 xcode 14 以修复滚动

包装在 AnyView 中时 UIViewControllerRepresentable 无法正常工作

Swift 5.7 - 使存在的任何协议符合 Hashable

JSONDecoder 在模拟器上运行良好时无法在真实设备上解码

使用 RxDatasources 作为数据源时如何填充自定义页眉/页脚视图

在 Swift 中为 UITextField/UIView 摇动动画

如何阻止图像在 UIImageView 中拉伸?

iOS 中的 Crashlytics 不会继续通过 Fabric 应用程序中的构建您的项目

刷新由 Xcode 7 管理的团队配置文件中的设备?

iOS应用程序每隔一次启动就会崩溃,找不到错误

如何为 UILabel 的背景 colored颜色 设置动画?

如何创建 Select 器数组