Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 为响应与UI元素的代码交互而调用的iAction_Ios_Swift_Ios10_Ibaction - Fatal编程技术网

Ios 为响应与UI元素的代码交互而调用的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被命中,动画反转 但是,在

在以前版本的iOS中,iAction仅在响应用户操作时触发。现在,它们似乎也是通过与用户交互在同一线程上的代码交互触发的。。。我可能没有说得那么好,但这里有一个例子:

@IBAction func switchToggled(_ sender: UISwitch) {
     sender.setOn(!sender.isOn, animated: true)
}
尼托。这是我们的元素。我在iOS 9及以下版本中预期的行为是:

  • 用户分接开关
  • 动画开始
  • iAction被命中,动画反转
  • 但是,在iOS 10中,步骤3修改为

  • iAction被命中,
    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
    不应发送操作消息,但在这种特殊情况下,它似乎正在发送操作消息。