请尝试以下方法 (从manecosta复制并粘贴)
根据另一个答案建议更换自定义按钮可能不是个好主意,因为这样会失去默认的行为和样式。
你还有另一个选择,可以在视图控制器上实现viewWillDisappear方法,并检查名为isMovingFromParentViewController的属性。如果该属性为true,则表示视图控制器正在消失,因为它被移除(弹出)。
代码示例:
override func viewWillDisappear(animated : Bool) {
super.viewWillDisappear(animated)
if (self.isMovingFromParentViewController()){
// Your code...
}
}
这里是另一个问题的链接
该问题需要解决当用户点击导航栏的返回按钮时触发某个操作的方法。尝试调用这个函数
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if self.isMovingFromParent {
print("isMovingFromParent()") // dismiss for push viewController
}
if self.isBeingDismissed {
print("isBeingDismissed()") // dismiss for modal that doesn't has navigationController
}
if self.navigationController?.isBeingDismissed ?? false {
print("navigationController?.isBeingDismissed()") // dismiss for modal that has navigationController
}
}
override func viewWillDisappear(animated: Bool) {
// Do Your Lines of Code ...
}
试试这个:
override func willMoveToParentViewController(parent: UIViewController?) {
if parent == nil {
// Back button Event handler
}
}
willMove(toParentViewController:)
。如果此方法未被调用,您的视图控制器是否位于UINavigationController
内?它是否具有自己的返回按钮而不是由UINavigationController
提供的按钮? - John Pang每次向前或向后调用“viewWillDisappear”。 但是,如果您添加此检查,它仅在从控制器返回时调用。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParent {
print("Only back action")
}
}