2012-10-17 5 views
3

В настоящее время у меня есть UISwitch, который при включении и выключении увеличивает и уменьшает счетчик соответственно.UISwitch double tap

Когда счетчик равен 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; 
    } 
} 

Есть ли способ убедиться, что переключатель переходит из состояния включения в выключенное fu перед возвращением или лучшим подходом к этому?

ответ

3

Решение, чтобы определить, действительно ли было изменение, состоит в том, чтобы сохранить дополнительную переменную 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]; 
    } 
} 

Это произойдет тогда, когда состояние переключателя действительно изменилось.

+0

Спасибо wsidell, работал как сон, теперь ползунки действуют так, как должны. Wohoo! – SmokersCough