Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否可以覆盖Swift中UIButton的操作方法?_Ios_Swift_Uibutton - Fatal编程技术网

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