didSelectRow仅在多点触控时调用

是什么让UITableViewCell只检测多点触控? 如果我用一根手指敲击它就不会调用didSelectRowAtIndex

这是我的代码:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "bookingSettingsCell", for: indexPath) as! SettingsTableViewCell if indexPath.row < 3 { cell.settingSwitch.removeFromSuperview() } cell.settingTitle.text = dataForSetting[indexPath.row].first if dataForSetting[indexPath.row].last != "Pencil" { cell.settingValue.isHidden = true cell.settingChangable.isHidden = true cell.settingSwitch.isHidden = false } return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { DispatchQueue.main.async(execute: { if indexPath.row < 3 { let destinationVC = self.storyboard?.instantiateViewController(withIdentifier: "DatePicker") as! DatePickerViewController destinationVC.modalPresentationStyle = .overCurrentContext destinationVC.delegate = self self.present(destinationVC, animated: true, completion: nil) } }) } 

UITableViewCell类:

 class SettingsTableViewCell: UITableViewCell { @IBOutlet var settingTitle: UILabel! @IBOutlet var settingChangable: UIImageView! @IBOutlet var settingValue: UILabel! @IBOutlet var settingSwitch: UISwitch! override func awakeFromNib() { super.awakeFromNib() settingSwitch.transform = CGAffineTransform(scaleX: 0.65, y: 0.60) } } 

在实现手势识别器的委托方法之后,您可以处理uitableviews's didSelectRowAt方法的行为。 这可以防止uiviewtableViewCell之间的抽头的未定义行为,并保留触摸记录。

UIGestureRecognizerDelegate方法:

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { println("in shouldReceiveTouch") gestureRecognizer.delegate = self if (touch.view == tableView){ println("touching tableView list") return false } else{ println("touching elsewhere") return true } } 

我认为问题不在didSelectRowAt中,而是在UITableViewCell中…你在设计xib时使用约束逻辑吗? 有些对象(label或imageView)可能会产生触摸问题…查看约束或直接在故事板中的uitableView中设计tableViewCell。

我发现这是因为我将UITapGestureRecognizer添加到我的UITapGestureRecognizer ,所以我可以隐藏键盘。 但实际上仍然不明白为什么在这种情况下它适用于多点触控? 我建议我的错误应该阻止所有点击事件。

您可以通过在类中添加UIGesture识别器委托来解决此问题。 在您的课程中添加UIGestureRecognizerDelegate 。 按着这些次序:-

/ *

 class SignupInstructorViewController: UIViewController, UIGestureRecognizerDelegate 

注意: –现在要确定您是在点击tableView还是其他一些地方,你必须像这样实现这个手势委托。

// MARK: – 手势代表

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { // if user touch the tableview then below condition will be true if touch.view != nil && (touch.view!.isDescendantOfView(tableViewName)) { return false } return true } 

HopeFully,它适合你。

提前致谢。

* /