Ios 导航栏RemovegestureRecognitor未删除Guesture

Ios 导航栏RemovegestureRecognitor未删除Guesture,ios,swift,navigation,uigesturerecognizer,gesture,Ios,Swift,Navigation,Uigesturerecognizer,Gesture,我需要在导航栏或视图上添加点击手势。 我得到了下面的解决方案,效果非常好 但是removeGestureRecognizer并没有删除手势,它破坏了其他视图控制器中其他后退按钮的功能 如何解决这个问题 var taskTodoOnBar : UITapGestureRecognizer! override func viewWillAppear(animated: Bool) { navigationController?.view.addGestureRecognizer(taskT

我需要在导航栏或视图上添加点击手势。 我得到了下面的解决方案,效果非常好

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

如何解决这个问题

var taskTodoOnBar : UITapGestureRecognizer!

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

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

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

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

声明的手势为

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")
            }
        }
    }
删除为

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")
            }
        }
    }
更新的回答-手势计数打印为零

控制台输出:

尝试使用此

声明的手势为

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")
            }
        }
    }
删除为

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")
            }
        }
    }
更新的回答-手势计数打印为零

控制台输出:


在iOS极客的帮助下,我发现,手势识别器!。ViewDddLoad中的计数为2,但ViewWillEnglish中的计数为零

然后,我进一步挖掘,发现我已经为我的后退按钮编写了自定义代码

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

    // CodTdo ...

    self.navigationController!.popToViewController(VC2, animated: true)
}
因此,在这种情况下,我们应该在popToViewController之前移除VegTestureRecognitor

因此,这是为所有我希望在使用自定义后退按钮时不会像我一样犯错误的人准备的

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

    // CodTdo ...

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

在iOS极客的帮助下,我发现,手势识别器!。ViewDddLoad中的计数为2,但ViewWillEnglish中的计数为零

然后,我进一步挖掘,发现我已经为我的后退按钮编写了自定义代码

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

    // CodTdo ...

    self.navigationController!.popToViewController(VC2, animated: true)
}
因此,在这种情况下,我们应该在popToViewController之前移除VegTestureRecognitor

因此,这是为所有我希望在使用自定义后退按钮时不会像我一样犯错误的人准备的

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

    // CodTdo ...

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

嘿,Sujay,您是否尝试从视图中列出手势数组,例如navigationController?.navigationBar.GestureRecograiners以检查数组是否正常?navigationBar.GestureRecograiners计数为零。添加了相同的问题。嘿,Sujay,您是否尝试从视图中列出手势数组,例如navigationController?.navigationBar.GestureRecograiners以检查数组是否正常?navigationBar.GestureRecograiners计数为零。添加了有问题的相同项。navigationController?.view.GestureRecognitors返回零。检查更新的代码-我之前在这里发布了一个新的链接,当下载时它不起作用。是的,在视图中。即使我得到了相同的链接。你能试着在视图中打印相同的内容吗。在VC3中添加所有代码。所以,当您回到VC2时,VC2上的“返回”按钮应该会起作用,并将您带到VC1让我检查pleasenavigationController?.view.gestureRecognitors返回零。检查更新的代码-我之前在这里发布了一个新的链接,当下载时它不起作用。是的,在视图中。即使我得到了相同的链接。你能试着在视图中打印相同的内容吗。在VC3中添加所有代码。所以当你回到VC2时,VC2上的“返回”按钮应该可以工作,并带你到VC1让我检查一下