RxSwift中UITapGestureRecognizer的无法识别的选择器

时间:2017-08-14 17:22:22

标签: ios swift rx-swift uitapgesturerecognizer

我使用RxSwift并且我想使用UITapGestureRecognizer来关闭keyBoard:

  let tapGest = UITapGestureRecognizer()
    tapGest.rx.event.subscribe(onNext: {[weak self] _ in
        self?.view.endEditing(true)
    }).disposed(by: disposeBag)
    view.addGestureRecognizer(tapGest)

但是当我使用手势时,应用程序正在终止此错误:

  

***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [ TtGC7RxCocoa13GestureTargetCSo22UITapGestureRecognizer eventHandler:]:无法识别的选择器发送到实例0x600000446bd0'

3 个答案:

答案 0 :(得分:1)

Swift 3.0

我已经看到了您的问题并尝试在我的项目中实施。基于此,我找到了解决方案来做到这一点。希望这也会对你有所帮助。

let tapGest = UITapGestureRecognizer()
 view.addGestureRecognizer(tapGest)

  tapGest.rx.event.bind { (recognizer) in
      self.view.endEditing(true)
  }.disposed(by: disposeBag)

答案 1 :(得分:0)

有一些辅助方法可以将轻击手势放在RxCocoa中的视图上。从那里,你可能想要过滤手势识别器的状态,这样你就不会发现所有不重要的事件。类似的东西:

view.rx.tapGesture()
    .filter { $0.state == .ended }
    .subscribe(onNext: { _ in
        // Do something
    })
    .disposed(by: disposeBag)

答案 2 :(得分:0)

有同样的问题。是RxCocoa中的一个错误。

https://github.com/ReactiveX/RxSwift/issues/1382