正如Apple的文档所写,UISwitch
的函数setOn(on: Bool, animated: Bool)
不会发送动作。它在iOS 10之前工作正常,但它会在我在iOS 10中调用它之后发送动作。我在“ValueChanged”事件中调用它来强制切换回来,所以我把这个事件动作两次。这是iOS 10中的一个错误吗?
DispatchQueue.main.async {
sender.setOn(flag, animated: animated)
}
它适用于Xcode 8。
但直接在主线程上调用UISwitch.setOn(_:animated:)
不起作用。
感谢@codiction:
qazxsw poi可以直接在主线程上调用,但不能在iOS 10上的UISwitch ValueChanged操作中直接调用。
以下解决方案可解决该问题。只有在尝试在该交换机本身的动作回调中调用[UISwitch setOn:]时,才应调度dispas_async。
UISwitch.setOn(_:animated:)
我发现这些解决方案部分有效。但是,当我使用dispatch_async(dispatch_get_main_queue(), ^{
[switch setOn:YES animated:YES];
});
时,switch.setOn(false, animated: true)
颜色在关闭位置会显示为白色。我假设这是一个错误,但我通过使用这个来解决这个问题:
onTint
当您准备好允许切换开关时,请不要忘记重置switch.setOn(false, animated: true)
switch.onTintColor = .clear
颜色(如果适用)。
onTint
希望这有助于节省一点时间。