检查 Popped UIViewController 是否被滑动解除
Check if Popped UIViewController gets dismissed by swipe
我想在用户滑动弹出的 viewController 时检查。因此,例如,当用户在 whatsApp 中通过从边缘滑动退出当前聊天时。 Swift怎么可能?
我不想使用 viewDidDisappear,因为当在当前 viewController 上显示另一个 viewController 时也会调用此方法。
此“滑动”由 UINavigationController
的 interactivePopGestureRecognizer
处理。可以将此手势识别器的委托设置为您的 UIViewController
,如下所示:
navigationController?.interactivePopGestureRecognizer?.delegate = self
然后,您可以在 UIViewController
中实现 UIGestureRecognizerDelegate
。这看起来像这样:
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard gestureRecognizer.isEqual(self.navigationController?.interactivePopGestureRecognizer) else { return true }
print("The interactive pop gesture recognizer is being called.")
return true
}
}
我没有测试代码,但每次使用 interactivePopGestureRecognizer 时都应该打印。
有关详细信息,请参阅 interactivePopGestureRecognizer and UIGestureRecognizerDelegate 的文档。
正如我在评论中所写,一个简单的解决方法是 viewDidDisappear
,检查 navigationController
是否为 nil
。
class MyVc: UIViewController {
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if navigationController == nil {
print("view controller has been popped")
}
}
}
当然,这个解决方案只有在view controller嵌入到navigation controller中才有效,否则if语句总是true
.
我想在用户滑动弹出的 viewController 时检查。因此,例如,当用户在 whatsApp 中通过从边缘滑动退出当前聊天时。 Swift怎么可能?
我不想使用 viewDidDisappear,因为当在当前 viewController 上显示另一个 viewController 时也会调用此方法。
此“滑动”由 UINavigationController
的 interactivePopGestureRecognizer
处理。可以将此手势识别器的委托设置为您的 UIViewController
,如下所示:
navigationController?.interactivePopGestureRecognizer?.delegate = self
然后,您可以在 UIViewController
中实现 UIGestureRecognizerDelegate
。这看起来像这样:
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard gestureRecognizer.isEqual(self.navigationController?.interactivePopGestureRecognizer) else { return true }
print("The interactive pop gesture recognizer is being called.")
return true
}
}
我没有测试代码,但每次使用 interactivePopGestureRecognizer 时都应该打印。
有关详细信息,请参阅 interactivePopGestureRecognizer and UIGestureRecognizerDelegate 的文档。
正如我在评论中所写,一个简单的解决方法是 viewDidDisappear
,检查 navigationController
是否为 nil
。
class MyVc: UIViewController {
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if navigationController == nil {
print("view controller has been popped")
}
}
}
当然,这个解决方案只有在view controller嵌入到navigation controller中才有效,否则if语句总是true
.