Как принудительно нажать на UIBarButtonItem с помощью RxSwift?

Это то, что я делаю, чтобы установить UIBarButtonItem:

mainView.userBarButtonItem.rx.tap.bind { _ in
    self.router.presentUserController(from: self)
}.disposed(by: bag)

, но теперь мне нужно сделать sth, чтобы вызвать это закрытие. Как;?

)
0
задан Bartłomiej Semańczyk 13 August 2018 в 10:30
поделиться

3 ответа

Попробуйте это, будет отлично работать

    mainView.userBarButtonItem.rx.tap.subscribe(onNext: { [unowned self] in
        self.router.presentUserController(from: self)
    }).disposed(by: disposeBag)

Спасибо

0
ответ дан Jogendra.Com 15 August 2018 в 14:05
поделиться
  • 1
    Хорошо, это сработает;) Я знаю ... но как заставить эту подписку звонить из кода? – Bartłomiej Semańczyk 13 August 2018 в 11:09

Вы можете сделать это:

UIApplication.shared.sendAction(barButtonItem.action!, to: barButtonItem.target, from: self, for: nil)
0
ответ дан mojtaba al moussawi 15 August 2018 в 14:05
поделиться

Вы можете имитировать щелчок, выполнив:

if let target = mainView.userBarButtonItem.target, let action = mainView.userBarButtonItem.action {
  _ = target.perform(action, with: mainView.userBarButtonItem)
}

Будет работать после подписки на последовательность tap.

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

0
ответ дан Valérian 15 August 2018 в 14:05
поделиться
  • 1
    действительно, это для модульного тестирования;) Мне нужно проверить, получает ли маршрутизатор обратный вызов при нажатии этой кнопки – Bartłomiej Semańczyk 13 August 2018 в 15:04
  • 2
    Вы должны использовать для этого UI Testing, а не Unit Testing ... Во всяком случае, вышеперечисленное вызовет наблюдаемую последовательность rx, поскольку rx устанавливает себя как цель и действие при подписании. – Valérian 13 August 2018 в 16:31

Другие вопросы по тегам:

Похожие вопросы: