在标签栏控制器中禁用和启用导航控制器向后滑动的正确方法
Posted
技术标签:
【中文标题】在标签栏控制器中禁用和启用导航控制器向后滑动的正确方法【英文标题】:Correct way to disable and enable swipe back for navigation controllers in tab bar controllers 【发布时间】:2016-10-08 14:39:29 【问题描述】:我有一个带有三个标签的TabBarController
。第一个和最后一个选项卡是导航控制器,我希望在其中启用向后滑动。中间选项卡只是一个标准的viewController
。默认情况下,似乎未启用向后滑动。我想这是因为我在这两个navigationControllers
中使用了后退按钮。我已经在两个导航控制器的根视图控制器中尝试了以下代码来启用它:
在viewDidLoad
:
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
并符合UIGestureRecognizerDelegate
:
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
if (self.navigationController?.viewControllers.count)! > 1
return true
return false
现在重新滑动可以正常工作,但是偶尔如果其中一个视图控制器将另一个视图控制器推到 UI 顶部并且应用程序将全部冻结。在 Swift 中启用和禁用回扫的正确方法是什么?
【问题讨论】:
【参考方案1】:对于像我这样在 2 年后发现这个问题却没有答案的人
视图控制器
在viewDid<strong>Appear</strong>
:
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
还有你的UIGestureRecognizerDelegate
extension YourViewController: UIGestureRecognizerDelegate
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
if gestureRecognizer.isEqual(navigationController?.interactivePopGestureRecognizer)
navigationController?.popViewController(animated: true)
return false
【讨论】:
在 Swift 5.2 中工作。谢谢,非常聪明。【参考方案2】:实现这一目标的两个步骤:
-
将
UIGestureRecognizerDelegate
添加到您的类继承中
在viewDidLoad
中添加以下内容:
要启用向后滑动:
navigationController?.interactivePopGestureRecognizer?.isEnabled = true
要禁用向后滑动:
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
【讨论】:
只需实现 UIGestureRecognizerDelegate 然后在gestureRecognizerShouldBegin中执行操作以上是关于在标签栏控制器中禁用和启用导航控制器向后滑动的正确方法的主要内容,如果未能解决你的问题,请参考以下文章