【问题标题】:Navigation Bar removeGestureRecognizer is not removing the Guesture导航栏 removeGestureRecognizer 未删除 Guesture
【发布时间】:2018-01-23 04:47:13
【问题描述】:

我需要在导航栏或视图上添加点按手势。 我得到了以下解决方案,效果很好。

但是removeGestureRecognizer 并没有移除手势,而是破坏了其他视图控制器中其他后退按钮的功能。

如何解决这个问题?

var taskTodoOnBar : UITapGestureRecognizer!

override func viewWillAppear(animated: Bool)
{
    navigationController?.view.addGestureRecognizer(taskTodoOnBar)
}

override func viewWillDisappear(animated: Bool)
{
    navigationController?.view.removeGestureRecognizer(taskTodoOnBar)
}

或者

override func viewWillAppear(animated: Bool)
{
    navigationController?.navigationBar.addGestureRecognizer(taskTodoOnBar)
}

override func viewWillDisappear(animated: Bool)
{
    navigationController?.navigationBar.removeGestureRecognizer(taskTodoOnBar)
}

当我尝试获取手势识别器计数时,它显示为零。那么在哪里添加手势呢?

override func viewWillDisappear(animated: Bool)
{  
   print(navigationController!.view.gestureRecognizers!.count)
   print(navigationController!.navigationBar.gestureRecognizers!.count)
}

【问题讨论】:

  • 嗨 Sujay,您是否尝试过从视图中列出手势数组,例如 navigationController?.navigationBar.gestureRecognizers 以检查数组是否正常?
  • navigationBar.gestureRecognizers 计数为零。已添加相同的问题。

标签: ios swift navigation uigesturerecognizer gesture


【解决方案1】:

试试这个

将手势声明为

let tapGesture : UITapGestureRecognizer = UITapGestureRecognizer()

手势处理程序

@objc func tapHandler(handler: UITapGestureRecognizer){
        print("gesture Added")
    }

在导航栏中添加为

override func viewDidLoad()
    {
        super.viewDidLoad()
        tapGesture.numberOfTapsRequired = 1
        tapGesture.addTarget(self, action: #selector(VC2.tapHandler(handler:)))
        self.navigationController?.view.addGestureRecognizer(tapGesture)
    }

删除为

override func viewWillDisappear(_ animated: Bool) {
        for gesture in (navigationController?.view.gestureRecognizers)! {
            if gesture == tapGesture {
                navigationController?.view.removeGestureRecognizer(tapGesture)
                print("removed")
            }
        }
    }

更新的答案 - 手势计数打印为零

控制台输出:

【讨论】:

  • navigationController?.view.gestureRecognizers 返回 nil。所以在问题中添加了相同的内容。
  • 我之前在此处发布了新链接,下载时无法使用
  • 在 ViewDidLoad 中是的,即使我得到了相同的结果。您可以尝试在 viewWillDisappear 中打印相同的内容吗?在 VC3 中添加所有代码。所以当你回到 VC2 时,VC2 上的后退按钮应该可以工作并带你到 VC1
  • 请让我检查一下
【解决方案2】:

在 iOS Geek 的帮助下,我发现,gestureRecognizers!.count 在 ViewdDidLoad 中为 2,但在 viewWillDisappear 中为 nil。

然后我挖掘了更多,发现我已经为我的后退按钮编写了自定义代码。

所以在这种情况下,我们应该在popToViewController之前移除GestureRecognizer

所以这适用于所有我不希望在使用自定义后退按钮时像我一样犯错误的人。

func backBarBtnFnc(sender: UIBarButtonItem)
{
    navigationController?.navigationBar.removeGestureRecognizer(taskTodoOnBar)

    // CodTdo ...

    self.navigationController!.popToViewController(VC2, animated: true)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2018-12-22
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多