📅  最后修改于: 2023-12-03 15:00:24.739000             🧑  作者: Mango
当你在 UITableView 中点击单元格时,你期望 didSelectRowAt 方法被调用。但是,如果这个方法没有被调用,你就需要排查错误。以下是可能的原因和解决方案。
UITableViewDelegate
协议或者没有将 UITableViewDelegate
协议指定给表视图。UITableViewDelegate
的代理对象指定给表视图。UITableViewDelegate
协议方法被意外地修改或删除了。UITableView
的用户交互。UITableViewCell
,没有在 cellForRow
中设置可互动状态或其它属性,例如 cell.userInteractionEnabled = true
。didSelectRowAt
方法。此时,可以通过给单元格设置 selectionStyle
属性来解决这个问题。UITableViewDelegate
协议。UITableViewDelegate
的代理对象指定为表视图的视图控制器。UITableViewDelegate
协议方法是否被符号化了。你可以在 UITableViewDelegate
中手动添加 didSelectRowAt
方法,确保它调用了 UITableViewDelegate
原始实现。例如: super.tableView(tableView, didSelectRowAt: indexPath)
UITableView
的 isUserInteractionEnabled
属性实现。UITableViewCell
设置交互性(也称为可选)状态。这可以在 cellForRow
方法中通过设置 cell.userInteractionEnabled = true
实现。selectionStyle
属性。class YourViewController: UIViewController, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var data = [String]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self // 确定代理
tableView.dataSource = self
data = ["Hello", "World", "Selection", "Failed"]
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Selected: ", data[indexPath.row])
}
}
extension YourViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.selectionStyle = .default // 设置选择样式
cell.textLabel?.text = data[indexPath.row]
cell.imageView?.image = UIImage(systemName: "info.circle")
return cell
}
}
以上就是在 UITableView 中,为什么 didSelectRowAt
方法可能没有被调用以及如何解决的一些常见原因。在遇到调试过程中遇到错误时,应该认真检查上述原因,然后根据具体情况解决问题。