UISwitch setOn(:, animated:) does not work as document

前端 未结 3 915
失恋的感觉
失恋的感觉 2021-02-08 00:42

As Apple\'s document write, UISwitch\'s function setOn(on: Bool, animated: Bool) does not send action. It works fine before iOS 10, but it will send ac

相关标签:
3条回答
  • 2021-02-08 00:54

    I found these solutions to partially work. However, when I used switch.setOn(false, animated: true) the onTint color would appear white in the off position. I'm assuming this is a bug but I worked around this by using this:

    switch.setOn(false, animated: true)
    switch.onTintColor = .clear
    

    Don't forget to reset the onTint color when you're ready to allow the switch to be toggled on, if applicable.

    switch.onTintColor = <your custom color> // Use nil to use the default onTint for UISwitch
    

    Hopefully this helps save someone a little time.

    0 讨论(0)
  • 2021-02-08 00:55

    The following solution resolves that issue. You should dispatch_async only if trying to call [UISwitch setOn:] within the action callback of that switch itself.

    dispatch_async(dispatch_get_main_queue(), ^{
    
        [switch setOn:YES animated:YES];
    });
    
    0 讨论(0)
  • 2021-02-08 01:04
    DispatchQueue.main.async {
        sender.setOn(flag, animated: animated)
    }
    

    it works for me in Xcode 8.

    but call UISwitch.setOn(_:animated:) directly on main thread doesn't work.

    Update

    thanks to @codiction:

    UISwitch.setOn(_:animated:) can be called direclty on main thread, but can't be called directly in UISwitch ValueChanged action on iOS 10.

    0 讨论(0)
提交回复
热议问题