需求:点击UISwitch开关,先进行网络请求,根据网络请求返回的结果来确定开关的状态。
问题:UISwitch默认是点击之后就立刻更该开关状态的,这就跟需求不相符,自定义又觉得稍微麻烦。
解决:点击的时候UISwitch会自动更改状态,而我们不想要他更改的话可以手动将UISwitch的状态再变回去,将动画关闭,这样点击的时候UISwitch会有没变状态的表象。之后再做网络请求,根据网络请求之后的结果再手动更改UISwitch的状态。
注意:这样做需要将 UISwitch 的
open func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControl.Event)
方法中的controlEvents参数由valueChanged改为touchUpInside
func switchDidTouch(sender: UISwitch) {
sender.setOn(!sender.isOn, animated: false)
//做相应的操作根据结果再变更状态
}