Как реагировать на значение, измененное в swiftrx до того, как оно будет установлено? (Вроде будет установлен только на Observable) - PullRequest
0 голосов
/ 10 марта 2020

У меня есть коммутатор, который Observable называется switchChanged, который я могу слушать.

extension Reactive where ... {
   lazy var toggleSwitch: UISwitch = {...}
   var switchChanged: Observable<Bool> {
      return toggleSwitch.rx
      .controlEvent(.valueChanged)
      .withLatestFrom(toggleSwitch.rx.value)
   }

У меня есть случай, который я хотел бы прослушать ..rx.switchChanged или ..rx.toggleSwitch.isOn , но до они фактически меняют свое значение (как willSet).

Сценарий будет следующим:

  1. Нажатие на переключатель

  2. Прослушивание щелчка

  3. Расчет, если возможно переключение переключателя и отображение счетчика

  4. a. если да, переключение переключателя и окончание счетчика

    b. если нет, не переключайте переключатель, показывая всплывающее окно с ошибкой и заканчивая счетчиком

Кто-нибудь знает, возможно ли это?

Ответы [ 2 ]

1 голос
/ 10 марта 2020

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

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

0 голосов
/ 12 марта 2020

Я полагаю, что вы проактивны в этом. Вместо того, чтобы проверять, является ли он переключаемым после , пользователь пытается переключить его, сделайте это раньше. Если пользователь не может изменить свое состояние, установите для его userInteractionEnabled значение false.

...