【问题标题】:Cancel gesturerecognizer when touching UITableView触摸 UITableView 时取消手势识别器
【发布时间】:2018-08-19 18:40:49
【问题描述】:

我有一个带有 2 个表格视图和几个文本字段的视图,我已经实现了一个扩展来隐藏键盘:

当我触摸屏幕时键盘会隐藏,但我想在触摸 TableView 时禁用 UITapGestureRecognizer,否则我无法与单元格交互。

extension UIViewController {

func OcultarTecladoTocarPantalla() {
    let tap : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.OcultarTeclado))
    view.addGestureRecognizer(tap)
}
@objc func OcultarTeclado() {
    view.endEditing(true)
}

}

【问题讨论】:

  • 您在哪里添加了您的 UITapGestureRecognizer?到您的视图控制器或表格视图?
  • 我已将其添加到视图控制器中

标签: ios swift uitableview keyboard hide


【解决方案1】:

编辑:我看到您正在扩展 UIViewController(这可能是不可取的,因为它适用于 UIViewController 的 所有 实例和子类),但您仍然应该能够设置委托。进行以下更改(代码来自this answer)。

通过写extension UIViewController: UIGestureRecognizerDelegate {扩展UIGestureRecognizerDelegate

在添加手势识别器时设置委托: tap.delegate = self

实现以下委托方法。它需要稍作修改以处理两个表视图。

// UIGestureRecognizerDelegate method
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    if touch.view?.isDescendantOfView(self.tableView) == true {
        return false
    }
    return true
}

上一个答案:

如果UIGestureRecognizercancelsTouchesInView 属性为false,则其下方的视图除了手势识别器之外还将接收触摸。

如果您确实想在这种情况下有效地禁用手势,请实现委托方法gestureRecognizer(_:shouldReceive:),如果触摸在 tableview 中则返回 false。

请参阅 https://developer.apple.com/documentation/uikit/uigesturerecognizerhttps://developer.apple.com/documentation/uikit/uigesturerecognizerdelegate/1624214-gesturerecognizer

【讨论】:

  • 当我实现了gestureRecognizer (_: shouldReceive :) 方法来取消触摸TableView 时的触摸时,我找不到方法
  • 您是否在设置代理或确定触摸是否在表格视图中时遇到问题?我在这里找到了与您的问题几乎相同的第二个问题的答案:stackoverflow.com/questions/8192480/…
猜你喜欢
  • 2019-11-29
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
相关资源
最近更新 更多