检查弹出的 UIViewController 是不是被滑动关闭
Posted
技术标签:
【中文标题】检查弹出的 UIViewController 是不是被滑动关闭【英文标题】:Check if Popped UIViewController gets dismissed by swipe检查弹出的 UIViewController 是否被滑动关闭 【发布时间】:2022-01-23 01:41:44 【问题描述】:我想检查用户何时将弹出的 viewController 滑开。因此,例如,当在 WhatsApp 中,用户通过从边缘滑动退出当前聊天。这在 Swift 中怎么可能?
我不想使用 viewDidDisappear,因为当另一个 viewController 出现在当前 viewController 上时,也会调用此方法。
【问题讨论】:
也许你可以检查viewDidDisappear
中的navigationController
是否为nil;这可能是一个解决方案,但不确定多少适合您的场景
非常感谢。它完美地工作。如果您愿意,可以将此评论添加为问题,我会将其标记为正确。
谢谢,我放了
【参考方案1】:
正如我在评论中所写,一个简单的解决方法是在viewDidDisappear
,检查navigationController
是否为nil
。
class MyVc: UIViewController
override func viewDidDisappear(_ animated: Bool)
super.viewDidDisappear(animated)
if navigationController == nil
print("view controller has been popped")
当然,这个解决方案只有在视图控制器嵌入导航控制器时才有效,否则 if 语句将始终为true
。
【讨论】:
当堆栈上有多个UIViewController
s 时,这将不起作用 - 对吧?只有当它是你刷掉的最后一个 VC。【参考方案2】:
这种“滑动”由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 和UIGestureRecognizerDelegate 的文档。
【讨论】:
以上是关于检查弹出的 UIViewController 是不是被滑动关闭的主要内容,如果未能解决你的问题,请参考以下文章
如何检查当前是不是正在显示 UIViewController?