Ios 为响应与UI元素的代码交互而调用的iAction
在以前版本的iOS中,iAction仅在响应用户操作时触发。现在,它们似乎也是通过与用户交互在同一线程上的代码交互触发的。。。我可能没有说得那么好,但这里有一个例子:Ios 为响应与UI元素的代码交互而调用的iAction,ios,swift,ios10,ibaction,Ios,Swift,Ios10,Ibaction,在以前版本的iOS中,iAction仅在响应用户操作时触发。现在,它们似乎也是通过与用户交互在同一线程上的代码交互触发的。。。我可能没有说得那么好,但这里有一个例子: @IBAction func switchToggled(_ sender: UISwitch) { sender.setOn(!sender.isOn, animated: true) } 尼托。这是我们的元素。我在iOS 9及以下版本中预期的行为是: 用户分接开关 动画开始 iAction被命中,动画反转 但是,在
@IBAction func switchToggled(_ sender: UISwitch) {
sender.setOn(!sender.isOn, animated: true)
}
尼托。这是我们的元素。我在iOS 9及以下版本中预期的行为是:
setOn
在action中被调用,然后iAction再次被命中UISwitch
,iAction似乎只被调用两次
我的猜测是,由于第二个设置与当前动画的方向匹配,因此它不会触发开关的另一个valueChanged
事件,因此不会触发第三个iAction
另一个观察结果是,如果在完成块中调用setOn
方法,它不会触发iAction。例如:
someViewController.present(someOtherController,
animated: true,
completion: { theSwitch.setOn(true) })
无论ui开关的动画状态如何,这都不会触发iAction
iOS 10是否有我不知道的变化?或者我认为iBaction专门用于显式用户交互的假设是错误的?(是的,我知道您可以手动将事件发送到UI元素以使它们执行操作,但这不是我要说的)
干杯 我测试了这个,它看起来像一个bug。根据iOS9和iOS10的文档setOn
不应发送操作消息,但在这种特殊情况下,它似乎正在发送操作消息。