我有一个相当基本的应用程序,它有一个
UINavigationController
和一个根 UIViewController
,我们可以称之为家。
从主屏幕,我们将一篇文章
UIViewController
推送到现有的UINavigationController
上
从文章
UIViewController
,我们可以推送其他几个UIViewControllers
。
我们想要添加一些分析来跟踪后退按钮点击事件。
我尝试过的方法及其局限性
我尝试根据这个答案这样做:https://stackoverflow.com/a/27713813/1619193 - 但是,我们失去了默认外观以及滑动返回的默认行为接近。
viewWillDisappear
就其本身而言,这不起作用,因为当我们推送/呈现其他视图控制器时也会调用
viewWillDisappear
,但是,我确实遇到了改进:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParent {
print("we are being popped")
}
}
这里的限制是,我们还会跟踪任何以编程方式弹出的实例,而不是纯粹的用户返回。
我还遇到了一些自定义 UINavigationController 以及符合 UINavigationControllerDelegate 的替代解决方案,但是我相信它们似乎与选项 2 具有相同的限制?
检测用户何时点击 iOS 提供的默认后退按钮的最佳/正确方法是什么?
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
}
}