我已经在页面加载时创建了我的视图按钮。
在我看来,我已经有了
NotificationCenter.default.addObserver(self, selector: #selector(self.didDoubleTapOnACircle(sender:)), name: .didDoubleTap , object: nil)
这些是收听视图自定义类中设置的通知。例如:
func doubleTapAction(sender : UIButton) {
print("Double tapped")
NotificationCenter.default.post(name: .didDoubleTap , object: nil, userInfo: ["tagTapped" : self.tag])
}
然后我已经
了 let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
doubleTap.numberOfTapsRequired = 2
self.addGestureRecognizer(doubleTap)
所以这一切都适用于初始加载。在我的主视图中,当我双击其中一个视图时,我已经运行了一次功能并完全符合预期。这段代码已经工作了几个月,如果我离开并回到页面,它已经开始运行两次。我离开并返回的次数并不重要,它会在两次运行时出现问题。
我的doubleTapAction令人困惑的是我打印了#34; Double tapped"),但在我的功能中,我在我的mainVC中调用了didDoubleTapOnACircle,我已经得到了打印输出并打印两次。手势识别器只能被识别出来#34;一次,但实际的功能被调用两次。
在我看来WillDissapear我有
NotificationCenter.default.removeObserver(self, name: .didDoubleTap, object: nil)
我的每个手势识别器功能都会发生这种情况。页面首次加载,全部运行一次。如果我离开,它们都会开始运行两次,但实际类的函数打印输出就像doubleTapAction一样打印一次。
有什么想法吗?
答案 0 :(得分:2)
将点击手势代码移至viewDidLoad
而不是viewDidAppear
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
doubleTap.numberOfTapsRequired = 2
self.addGestureRecognizer(doubleTap)
每次返回该屏幕时都会调用 viewDidAppear
。当您移动到其他屏幕时,您不需要移除手势识别器 - 只有在该视图可见时才会调用它们。