我有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)
}
}
答案 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/uigesturerecognizer和https://developer.apple.com/documentation/uikit/uigesturerecognizerdelegate/1624214-gesturerecognizer。