【问题标题】: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 中启用和禁用回扫的正确方法是什么?

【问题讨论】:

    标签: ios swift uinavigationcontroller uitabbarcontroller uigesturerecognizer


    【解决方案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】:

    实现这一目标的两个步骤:

    1. UIGestureRecognizerDelegate 添加到您的类继承中
    2. viewDidLoad 中添加以下内容:

    启用向后滑动:

    navigationController?.interactivePopGestureRecognizer?.isEnabled = true
    

    禁用向后滑动:

    navigationController?.interactivePopGestureRecognizer?.isEnabled = false
    

    【讨论】:

    • 只需实现 UIGestureRecognizerDelegate 然后在gestureRecognizerShouldBegin中执行操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多