【问题标题】:UISwitch double tapUISwitch 双击
【发布时间】:2012-10-08 05:27:04
【问题描述】:

我目前有一个UISwitch,它在打开和关闭时分别增加和减少一个计数器。

当计数器为 0 时,计数器不会递减。从功能上讲,这可以完美运行,但是我注意到了一个错误,想知道是否有人遇到过这种情况。

基本上,如果您非常快速地双击 UISwitch 在其远端位置(完全打开或关闭),计数器将增加两倍,因为我想象 UISwitch 没有完全达到关闭状态,因此只是添加到再次计数器而不先递减它。

这是我用来检查开关的代码:

// Sliders modified

- (IBAction)personalityChanged:(id)sender {
    if ([personality isOn] ){
        [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"1"];
        rating ++;
        NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
        [personality set]
    }
    else {
        [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"0"];
        [self subtractFromRating:nil];
        NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
    }
    [self checkRating:nil];
}

然后是减分:

// subtract from rating

-(void)subtractFromRating:(id)sender{
    if (rating == 0) {
        // do nothing
    }
    else
    {
        rating --;
    }
}

如果滑块处于某个位置,最后会发生什么:

// check rating

-(void)checkRating:(id)sender{
    switch (rating) {
        case 0:
            [matchRating setText:@""];
            [ratingGraphic setImage:[UIImage imageNamed:@""]];
            NSLog(@"rating is 0");
            break;
        case 1:
            [matchRating setText:@"Single Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic1.png"]];
            NSLog(@"rating is 1");
            break;
        case 2:
            [matchRating setText:@"Potential Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic2.png"]];
            NSLog(@"rating is 2");
            break;
        case 3:
            [matchRating setText:@"Great Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic3.png"]];
            NSLog(@"rating is 3");
            break;
        case 4:
            [matchRating setText:@"Hot Match"];
            [ratingGraphic setImage:[UIImage imageNamed:@"ratinggraphic4.png"]];
            NSLog(@"rating is 4");
            break;
        default:
            break;
    }
}

有没有办法确保开关在返回之前完全从开启状态变为关闭状态,或者有更好的方法?

【问题讨论】:

    标签: ios uiswitch


    【解决方案1】:

    检测是否确实发生了变化的一种解决方案是保留一个额外的 BOOL 变量来跟踪最后的开关状态。

    BOOL lastValue = NO; // initial switch state
    - (IBAction)personalityChanged:(id)sender {
        if (personality.isOn != lastValue) {
            lastValue = personality.isOn;
            if ([personality isOn] ){
                [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"1"];
                rating ++;
                NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
                [personality set]
            }
            else {
                [[[GlobalData sharedGlobalData]personalitySliderValue] replaceObjectAtIndex:currentRecord-1 withObject:@"0"];
                [self subtractFromRating:nil];
                NSLog(@"The value of personality slider is %@", [[[GlobalData sharedGlobalData]personalitySliderValue] objectAtIndex:currentRecord-1]);
            }
            [self checkRating:nil];
        }
    }
    

    这只会在开关状态实际改变时执行。

    【讨论】:

    • 感谢 wsidell,工作就像做梦一样,现在滑块可以正常工作了.. 哇哦!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2017-07-26
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多