触摸UITableView

时间:2018-03-11 18:19:17

标签: ios swift uitableview keyboard hide

我有2个tableview和几个textfield的视图,我已经实现了一个隐藏键盘的扩展名:

当我触摸屏幕时键盘隐藏但我想在触摸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)
}

}

1 个答案:

答案 0 :(得分:0)

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

通过撰写UIGestureRecognizerDelegate

来扩展extension UIViewController: 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
}

上一个回答:

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

如果您确实希望有效地禁用该案例的手势,请实施委托方法UIGestureRecognizer,如果触摸位于tableview中,则返回false。

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