Ios 快速UIControl目标操作,如何删除特定类?
我使用这样的代码将目标操作添加到UIControl(如UIButton)作为结束Ios 快速UIControl目标操作,如何删除特定类?,ios,swift,Ios,Swift,我使用这样的代码将目标操作添加到UIControl(如UIButton)作为结束 textField.addTarget(for: .editingChanged) { [weak self] sender in } func addTarget(for controlEvent: UIControl.Event = .touchUpInside, target: @escaping (_ sender: Any) ->()) { let key = String(des
textField.addTarget(for: .editingChanged) { [weak self] sender in
}
func addTarget(for controlEvent: UIControl.Event = .touchUpInside, target: @escaping (_ sender: Any) ->()) {
let key = String(describing: controlEvent)
let target = Target(target: target)
addTarget(target, action: target.action, for: controlEvent)
property[key] = target
}
将事件处理程序添加为闭包非常重要,因为我在协议扩展中使用此目标操作,因此无法在此扩展中使用@objc修饰符定义常规目标操作方法
我在滚动UITableView时添加此事件处理程序,当单元格从屏幕上消失时,需要删除此目标操作。
我想我可以删除所有的目标操作
但我更想说得更准确些,只是删除目标类的目标行为
看起来这个方法应该可以工作,并且不会干扰代码中其他地方添加的其他目标操作,但是我有一些疑问
func removeTarget(for controlEvent: UIControl.Event = .touchUpInside) {
let key = String(describing: controlEvent)
let target = property[key]
print("\(key)")
print("\(target)")
removeTarget(target, action: target?.action, for: controlEvent)
我也尝试过使用类似的东西,但这不起作用,因为第一个参数应该是rater目标对象,而不是类类型
textField.removeTarget(Target.self, action: nil, for: .editingChanged)
textField.removeTarget(Target.self, action: nil, for: .editingDidEnd)
有什么想法吗?似乎我一直在添加新的目标操作,然后对已经消失的TableView单元格调用了几个回调 不,我没有对self的引用,我认为使用removeTarget(用于controlEvent)的代码现在可以工作了,因为当我更新当前使用的控件列表==显示在屏幕上时,我做了一些修改。我认为这个属性[key]应该只删除作为给定controlEvent的闭包添加的操作,所以如果在代码的其他部分我将使用选择器方法,那么它将起作用,我想到的另一个解决方案是添加一些id参数,然后使用它在属性[key+id]中保存这个目标对象