在某些业务需求下,需要在点击后请求数据,请求成功后再改变UISwitch的状态,如果请求失败就保持原来的状态不变。在iOS13及以上的系统中想要保持原状态不变很容易,只需要在点击的时候或者状态改变的时候将状态改为原来的就可以了。如下代码
- (IBAction)valveChanger:(id)sender {
UISwitch * swt = (UISwitch *)sender;
[swt setOn:!swt.isOn animated:YES];
}
我是在状态改变的时候将状态改回来的,你也可以在点击的时候加上这代码,效果是一样的。
但是在iOS13以下执行上面的代码是做不到保持UISwitch原状态不变的,我测试了下当加上 [swt setOn:!swt.isOn animated:YES];代码时,UISwitch虽然状态属性已经变回原来的状态了,但是在界面上显示的不会变,具体是因为原因小编就不得而知了,希望有知道的大佬就告知一下。
最后小编在网上找到了一个大神的解决办法,代码如下
- (IBAction)valveChanger:(id)sender {
UISwitch * swt = (UISwitch *)sender;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(50 * NSEC_PER_MSEC)), dispatch_get_main_queue(), ^{
[swt setOn:!swt.isOn animated:YES];
});
}
让代码延迟执行就能解决iOS13以下的问题了。在此献上大神的原文链接iOS 如何让UISwitch保持原本状态
网友评论