iOS开发

UISwitch 重复触发action方法

2017-08-10  本文已影响33人  天天有写不完的代码

UISwitch

理论上,只用当用户点击了UISwitch,才会触发,vauleChange 的action方法
但是实际开发中,发现iOS10机型上,如果在action方法里调用了-setOn:animated:或者setOn: ,就会多触发一次action方法。

解决方案

  1. 避免在valueChange方法里调用-setOn:animated:setOn:
  2. 如果无法避免,使用dispatch_async,在主队列执行这些方法(这个方法有个缺点,比较卡的手机会看到闪动的现象)
- (IBAction)valueChanged:(id)sender {
    ...
    dispatch_async(dispatch_get_main_queue(), ^{
       [sender setOn:YES];
    });
    ...
}

3.iOS 10 以下机型不会出现这个问题,iOS11 待验证

参考

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

上一篇下一篇

猜你喜欢

热点阅读