当用户点击导航栏上的后退按钮时检测或收到通知

问题描述 投票:0回答:1

我有一个相当基本的应用程序,它有一个

UINavigationController
和一个根
UIViewController
,我们可以称之为家。

从主屏幕,我们将一篇文章

UIViewController
推送到现有的
UINavigationController

从文章

UIViewController
,我们可以推送其他几个
UIViewControllers

我们想要添加一些分析来跟踪后退按钮点击事件。

我尝试过的方法及其局限性

  1. 添加自定义栏按钮项目

我尝试根据这个答案这样做:https://stackoverflow.com/a/27713813/1619193 - 但是,我们失去了默认外观以及滑动返回的默认行为接近。

  1. 添加代码到
    viewWillDisappear

就其本身而言,这不起作用,因为当我们推送/呈现其他视图控制器时也会调用

viewWillDisappear
,但是,我确实遇到了改进

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    if self.isMovingFromParent {
        print("we are being popped")
    }
}

这里的限制是,我们还会跟踪任何以编程方式弹出的实例,而不是纯粹的用户返回。

  1. 其他选项

我还遇到了一些自定义 UINavigationController 以及符合 UINavigationControllerDelegate 的替代解决方案,但是我相信它们似乎与选项 2 具有相同的限制?

检测用户何时点击 iOS 提供的默认后退按钮的最佳/正确方法是什么?

ios swift uikit uinavigationcontroller
1个回答
0
投票

在 iOS 16+ 中,您可以将自定义操作分配给

backAction
。文档说

如果导航栏中已出现后退按钮,则设置此属性将替换其操作,而不修改其外观。

因此,如果您以编程方式关闭 VC,则不会触发此操作。

override func viewDidLoad() {
    navigationItem.backAction = UIAction { _ in
        print("Pressed back button!")

        self.navigationController?.popViewController(animated: true)
        // or perform an unwind segue, or whatever else you need to do to dismiss the VC
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.