CocoaAction с RxSwift и UIAlertController

Я пытаюсь реализовать текущее поведение с помощью текстового поля и кнопки: 1 - текстовое поле должно проверяться не в реальном времени, а только после нажатия кнопки, в нем должна отображаться метка ошибки для ошибки проверки 2 - если текстовое поле проверяется I необходимо показать uialertcontroller, чтобы отменить или продолжить операцию

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

            let action = CocoaAction {
            return Observable.create {
                [weak self] observer -> Disposable in
                let alertController = self.getAlertController()
                let ok = UIAlertAction.Action(NSLocalizedString("OK_BUTTON", comment: "OK_BUTTON"), style: .Default)
                ok.rx_action = CocoaAction { _ in
                    return self!.viewModel!.modify(self?.addressTextFiled.rx_text)
                        .doOnNext({ data in
                            if let data = data
                            {
                                self!.showMessage(data.message)
                            }
                        })
                        .map { _ in Void() }
                }
                let cancelAction = UIAlertAction(title: NSLocalizedString("CANCEL_BUTTON", comment: "CANCEL_BUTTON"), style: .Cancel) { (_) in }

                alertController.addAction(ok)
                alertController.addAction(cancelAction)

                self!.presentViewController(alertController, animated: true, completion: nil)
                return NopDisposable.instance
            }
        }
        confirmButton.rx_action = action

Что вы можете посоветовать по первому пункту?

Спасибо, что помогли мне !!


person jerrygdm    schedule 19.10.2016    source источник
comment
Можете ли вы еще раз проверить, что self!.viewModel!.modify завершается? Если он не завершается, это не освобождает действие для повторного выполнения.   -  person Ash Furrow    schedule 19.10.2016
comment
Что ты имеешь в виду? Если он отправит завершенное событие?   -  person jerrygdm    schedule 20.10.2016


Ответы (1)


В viewModel возвращается наблюдаемое:

    func modify() -> Observable<StatusResponse?>
{
    return input!.continueClick
        .withLatestFrom(requestData!)
        .flatMap{ [unowned self] (code, mail) -> Observable<StatusResponse?> in
            return self.provider.request(APIProvider.ModifyRequest(code, "A", mail))
                .mapObjectOptional(ModifyStatusResponse.self)
                .trackActivity(self.activityIndicator)
        }
        .retry()
        .shareReplay(1)
}

Что предотвращает завершение наблюдаемого?

person jerrygdm    schedule 20.10.2016