我有一些代表Firebase用户帖子的按钮。通知中心的操作堆叠在彼此的顶部?
当viewAppears我正在重绘圈子,以保持与信息的最新。但是,每次我重画圈时,它都会将与按钮关联的操作搞乱,方法是在调用操作的次数上加1。
我有一个类负责将操作添加到按钮上。
override init(frame: CGRect) {
super.init(frame: frame)
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
self.addGestureRecognizer(doubleTap)
}
func doubleTapAction(sender : UIButton) {
print("Double tapped")
NotificationCenter.default.post(name: .didDoubleTap , object: nil, userInfo: ["tagTapped" : self.tag])
}
因此,代码都是在我的“buttonPost”类中完成的。
然后在我的mainVC我在viewDidLoad中添加
观察员的通知中心的.didDoubleTapNotificationCenter.default.addObserver(self, selector: #selector(self.didDoubleTapOnACircle(sender:)), name: .didDoubleTap , object: nil)
最后我具备的功能来处理,我想它做的事:
func didDoubleTapOnACircle(sender: Notification) {
print("double tapped action called")
}
发生了什么事情是当我第一次加载页面按钮正在绘制和工作,因为他们应该。如果我在一个圆圈上双击,我会从我的班级功能中获得“双击”,并从我的观察员功能中获得“双击动作”。
问题是当我离开负责绘制圆圈的视图控制器,然后回到它时,“didDoubleTapOnCircle”被调用两次,“双敲动作称为”被打印出两次,但是“双击”得到打印一次。如果我要离开并回到主页面(又称重画圈子10次),则“双敲动作”将打印10次,“双击”仍然会被调用一次。
这是什么造成的?我不明白为什么如果我离开视图控制器并回来,我没有得到重复的按钮被绘制在旧的按钮上方,但手势识别器的动作从最后一次被吸入时叠加在彼此的顶部。
因此,tl; dr是我代表用户从firebase发布的帖子,作为可以在首页上重复出现的按钮。当我最初加载按钮的工作完美时,doubletapp操作被称为一次。每次离开并返回到按钮页时,调用didDoubleTapOnCircle函数的次数增加1.