Swift 如何为UITableViewCell的子视图禁用UITap手势?
我有一个带有两个不同自定义UITableViewCell的tableView。tableView中的第一个单元格始终为ResearchPostFeedTableViewCell类型,其余为CommentTableViewCell类型。第一个单元格类型包含一个子视图,点击该子视图时,我希望它执行某些操作。我的问题是,我在UIViewController.view中添加了一个隐藏键盘的UIAPTgestureRecognitor。因此,轻敲屏幕上的任何位置只会隐藏键盘。当用户点击第一个单元格的子视图时,如何禁用此点击手势?我尝试了以下操作,但我怀疑我没有完全正确地找到代码,以便在第一个单元格的子视图上定位触摸,以禁用UIViewController.view Tap手势Swift 如何为UITableViewCell的子视图禁用UITap手势?,swift,uitableview,uigesturerecognizer,Swift,Uitableview,Uigesturerecognizer,我有一个带有两个不同自定义UITableViewCell的tableView。tableView中的第一个单元格始终为ResearchPostFeedTableViewCell类型,其余为CommentTableViewCell类型。第一个单元格类型包含一个子视图,点击该子视图时,我希望它执行某些操作。我的问题是,我在UIViewController.view中添加了一个隐藏键盘的UIAPTgestureRecognitor。因此,轻敲屏幕上的任何位置只会隐藏键盘。当用户点击第一个单元格的子视图
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
我认为你的问题在于,隐藏键盘的轻触手势会取消其他触摸 只需将点击手势的属性设置为false,如下所示:
screenTapGesture.cancelsTouchesInView = false
超优雅的一行解决方案。非常感谢。超优雅的一行解决方案。非常感谢。