我有一个有两个不同的自定义UITableViewCell的tableView。 在tableView中,第一个单元格始终是ResearchPostFeedTableViewCell类型,其余单元格是CommentTableViewCell类型。 第一个单元格类型包含一个子View,当点击它时,我希望它能做一些事情。 我的问题是,我在UIViewController.view中添加了一个UITapGestureRecognizer,隐藏了键盘。 结果,点击屏幕上的任何地方都只能隐藏键盘。 当用户点击第一个单元格的子视图时,我如何专门禁用这个点击手势? 我已经尝试了以下方法,但我怀疑我没有完全掌握正确的代码,无法将触摸定位在第一个单元格的subView上,以禁用UIViewController.view tapGesture。
class CommentMainViewController: UIViewController, UITextViewDelegate, UIGestureRecognizerDelegate{
var myTableView: CommentOnPostTableView! // Custom UITableView
var screenTapGesture: UITapGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
...
screenTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(hideKeyBaord))
screenTapGesture.delegate = self
self.view.addGestureRecognizer(screenTapGesture)
...
}
func hideKeyBaord(){
// Hides the keyboard
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if gestureRecognizer == screenTapGesture{
let researchCell = myTableView.cellForRow(at: [0,0]) // First cell only
if let imageCarousel = researchCell?.imageView{
let location = touch.location(in: imageCarousel)
let isTouchImage = imageCarousel.frame.contains(location)
if isTouchImage{
print("IMAGE TOUCHED!")
// Disable screenTapGesture
return false
}else{
return true
}
}
return true
}else{
return false
}
}
}
我想你的问题是,隐藏键盘的点击手势会取消其他的触摸。
简单地设置 取消点击查看 像这样把你的点击手势的属性改为false。
screenTapGesture.cancelsTouchesInView = false