7

我正在使用 UISwitch 在我的应用程序中调用子视图来显示屏幕。但是,该开关仅在大约 60% 的时间内工作。为了测试我的代码,我将开关连接到另一个 IBAction 以将开关的状态写入控制台。两个功能在某些时候都不响应开关的状态,即,两个功能有时同时忽略开关的状态。有没有其他人在 iOS7 中使用 UISwitches 经历过这种行为?

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

编辑:

同一个开关连接到以下动作:

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

这两个动作都以相同的方式响应开关。

4

3 回答 3

4

我向你确认这种奇怪的行为!!!!只需左右拖动开关的小圆圈,您就会看到多次调用的动作(在我的情况下最多 403 :D )我真的不确定这是苹果工程师打算做的,因为我还没有找到任何关于这个新行为的文档,顺便说一句,如果你找到了,也请告诉我。

非常感谢

于 2013-10-17T15:01:44.187 回答
3

我在 iOS 7 应用程序中使用了几个 UISwitches,我对 Value Changed 操作的响应完全没有问题。开关始终正确地报告其值。您应该从 IB 中的操作中解开开关,然后重新连接,确保您正在连接 Value Changed 操作。

于 2013-10-02T14:48:22.217 回答
3

是的,使用 iOS 7 iPad 模拟器中的 UISwitch,我看到 1-12 次回调到我的等效 switchToggled: 方法。在最后一次回调中,值实际上已经改变。在之前的回调中,它没有。我正在做的是缓存开关是否打开。然后在 switchToggled: 方法中,我检查该值是否确实发生了变化。如果没有,我会忽略回调。这似乎使用户的行为正确。

该问题也确实发生在设备上,但显然不太常见。同样的解决方法似乎在那里工作。

于 2013-10-08T03:16:21.963 回答