无法使用didSelectRowAt为TableView

时间:2017-01-06 05:23:41

标签: ios uitableview swift3 didselectrowatindexpath

我无法让didSelectRowAt方法适用于常规TableView内的ViewController。我已确保该表的delegatedata source已在ViewController代码中设置。此ViewController会将tableview单元格与搜索查询的结果填充到 API ,并且单元格数据的呈现工作正常。

它只是未注册的didSelectRowAt方法。我确实尝试在Main.storyboard上手动添加相同的委托信息,但小的 + 符号不会触发任何弹出窗口。我想知道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()
    }
...
}

[Viewcontroller connections inspector]

[TableView Connections Inspector]

编辑:作为一个健全性检查,如果搜索异步函数正在改变任何东西,我只是尝试删除所有与搜索相关的代码并从硬编码的虚拟变量数组中填充tableview。它可以显示虚拟变量,但仍无法选择单元格并获得任何反应。我还看到一些提及我以前曾使用didDeSelectRowAt而不是didSelectRow的拼写错误,已修复但行为相同。

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

4 个答案:

答案 0 :(得分:2)

您使用didDeselectRowAt代替didSelectRowAt

修改

那么,请使用下面的委托

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

并使您的控制器符合UIGestureRecognizerDelegate

答案 1 :(得分:2)

发现它!罪魁祸首是self.hideKeyboardWhenTappedAround(),这是我为隐藏键盘而写的扩展。这干扰了细胞的敲击,因为它确实利用了UITapGestureRecognizer。感谢大家的提示。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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