Ios 快速UIControl目标操作,如何删除特定类?

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

我使用这样的代码将目标操作添加到UIControl(如UIButton)作为结束

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]中保存这个目标对象