无法让 didSelectRowAt 为 TableView 工作

Can't get didSelectRowAt to work for TableView

我无法让 didSelectRowAt 方法在常规 ViewController 中为 TableView 工作。我已经确保在 ViewController 代码中设置了 table 的 delegatedata source。此 ViewController 使用搜索查询的结果填充 tableview 单元格到 API,单元格数据的呈现工作正常。

只是didSelectRowAt方法没有注册。我确实尝试在 Main.storyboard 上手动添加相同的委托信息,但是 + 小符号不会触发任何弹出窗口 windows。我想知道 Main.storyboard 中是否有需要修复的内容。我还附上了 ViewControllerTableView 连接检查器的图像。我是 iOS 开发的新手,在移动设计的图形界面方面没有太多经验,所以我假设它在那里,但也许我错了。

这是我的代码的基本版本:

class SearchViewController: UIViewController, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource {


@IBOutlet weak var tableView: UITableView!
@IBOutlet var searchBar: UISearchBar!

   ...variable declarations ....

override func viewDidLoad() {
    super.viewDidLoad()
    self.hideKeyboardWhenTappedAround()
    searchResults = []
    searchBar.delegate = self
    tableView.dataSource = self
    tableView.delegate = self

}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1;
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return searchResults!.count;
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "searchTableViewCell", for: indexPath) as! SearchTableViewCell

    if(searchActive && !(self.searchResults?.isEmpty)!) {
        (doing some stuff with search results here...works fine)
    }
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  print("hello!")
}

func searchBar(_ searchBar: UISearchBar,
               textDidChange searchText: String) {
    print("search text \(searchText)")
    getSearchResultJSON(term: searchText) { json in
        let data = json as! [Dictionary<String, String>]
        self.searchResults = data
    }
    self.tableView.reloadData()
    }
...
}

[]

[]

编辑: 作为对搜索异步函数是否正在更改任何内容的完整性检查,我只是尝试删除所有与搜索相关的代码并填充 table 视图一个硬编码的虚拟变量数组。它可以显示虚拟变量,但仍然无法 select 一个单元格并得到任何反应。我还看到有几个人提到我之前用 didDeSelectRowAt 而不是 didSelectRow at 打错了字,现在已经修复但行为是一样的。

这最终与我编写的 hideKeyboardWhenTappedAround() 扩展中出现的点击手势有关

您正在使用 didDeselectRowAt 而不是 didSelectRowAt

编辑

好吧,下面就用这个delegate然后

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

并使您的控制器符合 UIGestureRecognizerDelegate

如果您在主视图上使用点击手势,那么 table 视图单元格 select 方法无法正常工作。

找到了!罪魁祸首是 self.hideKeyboardWhenTappedAround(),这是我编写的用于隐藏键盘的扩展。这干扰了细胞的点击,因为它确实利用了 UITapGestureRecognizer。谢谢大家指点。

在您上传的图片中,代理和数据源未连接到 ViewController。 删除 viewdidload (tableview.delegate = self) 中的代码并在故事板中连接它们。