Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Possible UISwitch bug in iOS7?

Tags:

ios

ios7

uiswitch

I am using a UISwitch to call a subview to screen in my app. However, the switch only works about 60% of the time. To test my code I hooked the switch to another IBAction to write the state of the switch to the console. Both functions are not responding to the state of the switch at certain times, i.e., both functions are ignoring the state of the switch simultaneously some of the time. Has anybody else experienced this behaviour with UISwitches in iOS7?

- (IBAction)showHideSomeSubView:(UISwitch *)sender {
if (_mySwitch.on) {
    [self.view addSubview:someSubView];
}
else {
    [someSubVew removeFromSuperview];
}}

Edit:

The same switch is connected to the following action:

- (IBAction)switchToggled:(UISwitch *)sender {
sender = _mySwitch;
if ([sender isOn]) {
    NSLog(@"On");
} else {
    NSLog(@"Off");
}}

Both actions respond in the same way to the switch.

like image 632
Barry Avatar asked Oct 02 '13 14:10

Barry


3 Answers

I confirm that weird behaviour with you!!!! Just drag the little circle of the switch around and around, you will see the action called multiple times (in my case up to 403 :D ) I am really not sure that is what Apple engineers intended to do, because I have not found any documentation about this new behaviour, BTW, if you find one, please let me know too.

Thank you very much

like image 137
Bùi Thanh Hải Avatar answered Nov 09 '22 18:11

Bùi Thanh Hải


I'm using several UISwitches in an iOS 7 app, I have had no problem at all responding to the Value Changed action. The switch consistently reports its value correctly. You should unhook the switch from its action in IB and then reconnect, making sure you are connecting the Value Changed action.

like image 3
RyanR Avatar answered Nov 09 '22 18:11

RyanR


Yes, with a UISwitch in the iOS 7 iPad simulator, I am seeing 1-12 callbacks to my equivalent of your switchToggled: method. On the last callback, the value has in fact changed. On the previous callbacks, it hasn't. What I am doing is caching whether or not the switch is on. Then in the switchToggled: method, I check whether or not the value has in fact changed. If it hasn't, I ignore the callback. This seems to make things behave correctly for the user.

The problem does also happen on the device, though apparently less often. The same work-around seems to work there.

like image 3
William Jockusch Avatar answered Nov 09 '22 18:11

William Jockusch