【问题标题】:unrecognized selector for UITapGestureRecognizer in RxSwiftRxSwift 中 UITapGestureRecognizer 无法识别的选择器
【发布时间】:2017-08-14 17:22:21
【问题描述】:

我正在使用 RxSwift,我想使用 UITapGestureRecognizer 关闭键盘:

  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'

【问题讨论】:

  • 检查我的答案,如果有任何问题,请告诉我

标签: ios swift rx-swift uitapgesturerecognizer


【解决方案1】:

Swift 3.0

我看到了您的问题并尝试在我的项目中实施。基于此,我找到了解决方案。希望这对您也有帮助。

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

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

【讨论】:

  • 谢谢,但没用 :(,我使用 Xcode 9.0 beta 4 和 RxSwift 4.0.0-alpha.0
【解决方案2】:

在 RxCocoa 中有一些帮助方法可以将点击手势放到视图上。从那里,您可能想要过滤手势识别器的状态,这样您就不会拾取所有无关紧要的事件。比如:

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

【讨论】:

    【解决方案3】:

    遇到了同样的问题。是 RxCocoa 中的一个错误。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2013-10-09
      • 2011-11-13
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      相关资源
      最近更新 更多