Как предотвратить изменение состояния UISwitch? - PullRequest
6 голосов
/ 02 января 2012

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

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

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

Пока я не могу заставить 2 работать.Прямо сейчас у меня есть клудж.Я заставляю переключатель возвращаться в положение ВЫКЛ:

[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?

ОБНОВЛЕНИЕ

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

Ответы [ 7 ]

8 голосов
/ 07 апреля 2016

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

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

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

3 голосов
/ 12 марта 2015

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

3 голосов
/ 02 января 2012

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

1 голос
/ 05 октября 2012

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

[self.switchButton setUserInteractionEnabled:NO];
1 голос
/ 02 января 2012

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

1 голос
/ 02 января 2012

установить состояние 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 голосов
/ 13 декабря 2018

довольно неприятно, что UISwitch, по-видимому, не имеет метода делегата, позволяющего проверить, следует ли изменять UISwitch.

Я добавил кнопку поверх UISwitch и обработал включение события IBAction кнопки, кажется, лучший способ.

...