2012-01-02 2 views
3

У меня есть UISwitch, который определен в файле .xib. Событие, с которым я подключен, - «Value Changed».Как предотвратить изменение состояния UISwitch?

Я хочу следующее поведение (по существу, предупреждая пользователя, что эта функция доступна в полной Vesion программного обеспечения):

  1. позволяет пользователю нажать на переключатель
  2. предотвратить переход от скольжения к " на»(я хочу, чтобы переключатель, чтобы остаться в положении„выключено“)
  3. показать предупреждение

до сих пор я не могу получить от 2 до работы. Прямо сейчас у меня есть клочья. Я заставляю переключатель, чтобы вернуться в положение OFF:

[self.switchButton setOn:NO animated:NO]; 

UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
alert.tag = ALERT_TAG; 
[alert show]; 

Проблема заключается в том, что вы видите переключатель в положение ON, то он переходит на положение OFF, а затем вы увидите окно с предупреждением.

Есть ли способ перехватить поведение, чтобы переключатель не скользил в положение ON?

UPDATE

Я пытался связать с событием «TouchUpInside» и переместил оповещения код. Это еще не достаточно рано, чтобы перехватить визуальное изменение состояния коммутатора.

+0

Что-то вроде 'self.switchbutton.enabled = NO'? –

+0

На самом деле я не хочу его отключать. Если я это сделаю, пользователь не сможет вызвать предупреждение. – milesmeow

+0

@milesmeow - поведение, которое вы получили, теперь выглядит хорошо. Пользователь нажимает, получает предупреждение, и коммутатор возвращается. –

ответ

1

установить состояние UISwitch кремовых в XIB и внутри метода valueChange действий

-(IBAction) switchValueChanged{ 
if (toggleSwitch.on) { 
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
    alert.tag = ALERT_TAG; 
    [alert show]; 
} 
} 
+0

Это работало? Я получаю ту же проблему, и я слушаю действие valueChange. Я установил тумблер в положение OFF, и я вижу, что он внезапно переключается с ON на OFF. – bantic

+0

@bantic прав, не работает –

2

Один простой раствор просто положить на кнопку с таким же размером и прозрачным цветом фона в передней части управления UISwitch. Хотя это не прямой ответ на ваш вопрос, это хорошо обходное решение, и я всегда делаю это с UIImageView.

+0

Я тоже об этом подумал. Это будет решение kludge, если я не могу заставить его работать иначе. :п. – milesmeow

1

Попробуйте прослушать событие TouchDown вместо TouchUpInside.

2

Почему бы у просто установить userInteraction к NO

[self.switchButton setUserInteractionEnabled:NO]; 
2

добавить четкий цветной подвид с этой точкой зрения UISwitch, накройте его и добавить UITapGestureReconizer к этому подвиду, и все операции действия может быть вызваны в водопроводных действиях, включая изменение статус просмотра UISwitch. Надеюсь, это поможет вам!

5

У меня была такая же проблема, как и вы. В вашем методе actionChanged вы должны вызвать метод setOn с анимированным набором в true. Таким образом, в стрижа, что будет:

@IBAction func switchValueChanged(sender: UISwitch) { 
    sender.setOn(false, animated: true) 
} 

Это может показаться нелогичным, так как этот метод вызывается после того, как значение переключателя изменилось. Но почему-то это работает.

+0

Это. Также обратите внимание, что вызов sender.setOn (...) не запускает событие valueChanged, тогда как sender.isOn = false WILL делает. –

Смежные вопросы