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.
可以在某种程度上给我任何建议.有哪些属性是错误的?
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:
\nself.tableview.delegate = self\nRun Code Online (Sandbox Code Playgroud)\nself.tableview.isUserInteractionEnabled = true\nRun Code Online (Sandbox Code Playgroud)\nself.tableview.allowsSelection = true\nRun Code Online (Sandbox Code Playgroud)\nfunc gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { \n return true\n}\nRun Code Online (Sandbox Code Playgroud)\n
如果您有一个分配了手势识别器的父视图,则需要执行以下操作:
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就开始像平常一样对点击做出反应
如果你ViewController有UIGestureRecognizer你应该禁用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)