'didSelectRowAt'没有被调用

Ste*_*ann 7 uitableview ios swift

我有关于UITableView委托功能的问题didSelectRowAt.一切都很好,但不幸的didSelectRowAt是没有被称为.我读了一些关于这个问题的其他stackoverflow问题,并尝试了一些解决方案,但它们都不适合我.我创建了tableview的子类,它是委托人本人:

class MyTableView : UITableView, UITableViewDelegate{

    override func awakeFromNib() {

        super.awakeFromNib()

        separatorStyle = .none

        backgroundView = nil
        backgroundColor = UIColor.clear

        isScrollEnabled = false

        delegate = self
        isEditing = false
        allowsSelection = true

    }


//    func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) {
//       
//    this is working        
//
//    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        print("not called")

    }    

} 
Run Code Online (Sandbox Code Playgroud)

所以所有子类都MyTableView将实现数据源的东西,这也很好(如果不知何故会提到这个).

奇怪的是didHighlightRowAt被调用,所以代表以某种方式工作.只有didSelectRowAt我想要的东西没有被召唤.

顺便说一下,没有UITapGestureRecognizer.

可以在某种程度上给我任何建议.有哪些属性是错误的?

Mos*_*sam 16

对我来说,从无更改选择样式解决了问题。

故事板


Lal*_*hna 15

请检查TableView'scell allowSelection.

tableView.allowsSelection = true
Run Code Online (Sandbox Code Playgroud)

编辑:

校验:

  • tableView.allowsSelection

  • cell.selectionStyle

  • 用户交互已启用


Ama*_*ani 10

可能存在以下问题\xe2\x80\xa8\xe2\x80\xa8s:

\n
    \n
  1. 您尚未设置 UITableView\xe2\x80\xa8\xe2\x80\xa8 的委托
  2. \n
\n
self.tableview.delegate = self\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 检查 UITableView 或 UITableViewCell\xe2\x80\xa8\xe2\x80\xa8 的用户交互是否未禁用
  2. \n
\n
self.tableview.isUserInteractionEnabled = true\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 检查tableview选择样式是否不是none\xe2\x80\xa8\xe2\x80\xa8
  2. \n
\n
self.tableview.allowsSelection = true\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 检查是否有任何手势未启用。\xe2\x80\xa8\xe2\x80\xa8
  2. \n
\n
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { \n    return true\n}\n
Run Code Online (Sandbox Code Playgroud)\n


igo*_*gor 8

如果您有一个分配了手势识别器的父视图,则需要执行以下操作:

self.tapGestureRecognizer = UITapGestureRecognizer(target: self, action: action)
if let tapGestureRecognizer = self.tapGestureRecognizer {
  tapGestureRecognizer.cancelsTouchesInView = false
  self.addGestureRecognizer(tapGestureRecognizer)
}
Run Code Online (Sandbox Code Playgroud)

告诉手势识别器停止取消触摸后,您的UITableView就开始像平常一样对点击做出反应

  • 超级有用。谢谢! (2认同)

Mir*_*zal 8

如果你ViewControllerUIGestureRecognizer你应该禁用UIGestureRecognizer.cancelsTouchesInView. 例如:

 extension UIViewController {

    public func hideKeyboarOnTap() {
        let tap = UITapGestureRecognizer(target: self, action: #selector(hideKeyboardAction))
        tap.cancelsTouchesInView = false
        self.view.addGestureRecognizer(tap)
    }

    @objc private func hideKeyboardAction() {
        self.view.endEditing(true)
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 2

我不知道您尝试过哪些其他解决方案,但如果您使用自定义 viewcell ,则可能是您没有在该组件上启用“用户交互启用”