Ios 是否可以覆盖Swift中UIButton的操作方法?
我有一个Ios 是否可以覆盖Swift中UIButton的操作方法?,ios,swift,uibutton,Ios,Swift,Uibutton,我有一个ui按钮。我想使用相同的ui按钮执行多个操作。首先,我以编程方式将操作设置为按钮 button1.addTarget(self, action: #selector(ViewController.function1), forControlEvents: .TouchUpInside) 接下来,我想放弃这个功能并添加其他操作 button1.addTarget(self, action: #selector(ViewController.function2), forControlEv
ui按钮
。我想使用相同的ui按钮执行多个操作。首先,我以编程方式将操作设置为按钮
button1.addTarget(self, action: #selector(ViewController.function1), forControlEvents: .TouchUpInside)
接下来,我想放弃这个功能并添加其他操作
button1.addTarget(self, action: #selector(ViewController.function2), forControlEvents: .TouchUpInside)
是否可以覆盖按钮的现有目标?您需要在添加新操作之前从目标中删除以前的操作,否则将导致两个操作都触发
button1.removeTarget(self, action: #selector(ViewController.function1), forControlEvents: .AllEvents)
添加目标时,可以使用按钮上的方法将其删除:
func removeTarget(_ target: AnyObject?,
action action: Selector,
forControlEvents controlEvents: UIControlEvents)
编辑:有关用法示例,请参见@Rohit KP的答案。但是,您可能需要考虑使用其他的“Advvices”,这取决于您需要什么。 < P>我命令您创建包装器函数。因为动态添加/删除目标可能导致死锁。
因此,您可能必须创建一个始终被调用的函数,并在以下方面完成您的工作:
@IBOutlet func myWrapper(sender : AnyObject?) {
if (conditionA) {
// do stuff A
} else {
// do stuff B
}
}
您建议的案例不会覆盖上一个操作,而是将第二个操作添加到按钮,从而导致调用ViewController.function1
和ViewController.function2
在使用添加新操作之前,需要从目标中删除以前的操作
按钮1.removeTarget(self,action:#选择器(ViewController.function1),forControlEvents:.AllEvents)
或者在添加新操作之前删除所有以前的操作
按钮1.删除目标(无,操作:无,forControlEvents:.AllEvents)
父代码:
@IBAction open func valueChanged(_ sender: UIButton) {
(do something)
}
子代码:
override open func valueChanged(_ sender: UIButton) {
super.valueChanged(sender)
changeColorsOnState()
}
你能提供你所说的死锁情况吗?这是最明智的答案,符合苹果框架。不,我不能,因为我不知道你的代码,我的意思是你可能处于删除所有目标或添加2个目标的状态。这真的很难保护。使用if-else语句是更安全的方式(和可调试的方式)要实现您的目标,在一个按钮上使用多个addTarget是没有意义的,高级推理是:“button->iAction,然后在action方法中开发您的条件..leftBarButton.target=nil,如果您正在寻找UIBarButtonim