UITableView didSelectRowAt indexPath 未在自定义单元格中调用

Posted

技术标签:

【中文标题】UITableView didSelectRowAt indexPath 未在自定义单元格中调用【英文标题】:UITableView didSelectRowAt indexPath not called in custom cell 【发布时间】:2016-10-26 09:14:15 【问题描述】:

我创建新的 ViewController 并拖动新的 UITableView 它可以工作,但是在我之前的两个 ViewController 中不能工作。

我已经完成了以下所有操作:

    UITableViewDelegate .delegate=self UITableViewDataSource .datasource=self Swift3 是 didSelectRowAt 不是 didDeselectRowAt .setEditing(true, animated: true) .allowsSelection = true .allowsSelectionDuringEditing = true 单选

我所有的数据都可以加载到tableview中,唯一的问题是不能选择行,在MainViewController中实际上我只有一个table view,另一个用于测试。

- 这是我的tableview无法选择行但可以加载数据的viewcontroller之一,这里我只有一个tableview,但是为了测试我创建了一个新的table view

- 这是第二个视图控制器无法选择行

这是我的 MainViewController

extension MainViewController: UITableViewDelegate, UITableViewDataSource 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

        return 10
    

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

        if tableView == self.tableview_restaurants 

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

            cell.label_name.text = "OMG Restaurant # \(String(indexPath.row))"

            return cell
        
        else if tableView == self.tableview_test 

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

            cell.label_test.text = String(indexPath.row)

            return cell
        
        else 
            let cell = UITableViewCell()

            return cell
        
    

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

        //tableView.deselectRow(at: indexPath, animated: true)
        if tableView == self.tableview_restaurants 

        
        else if tableView == self.tableview_test 
            print("select this row")
            print(indexPath)
        
    

这是我的 FilterViewController

extension SearchFilterViewController: UITableViewDelegate, UITableViewDataSource 


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

        var numberofrowsinsecion:Int = 0

        if (tableView == self.tableview_quickfilters) 

            numberofrowsinsecion = json_quickfilters["filters"].arrayValue.count
            //print(numberofrowsinsecion)
        

        else if (tableView == self.tableview_cuisinetype) 
            numberofrowsinsecion = json_cuisinetype["cuisine_types"].arrayValue.count
            //print(numberofrowsinsecion)
        

        return numberofrowsinsecion
    


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

        if (tableView == self.tableview_quickfilters) 

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

            let filter = json_quickfilters["filters"].arrayValue

            if let filter_name = cell.label_quickfiltersname 

                filter_name.text = filter[indexPath.row]["name"].stringValue
                filter_name.font = Common.Config.FontSize.XL_L
            
            return cell
        

        else if (tableView == self.tableview_cuisinetype) 

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

            let cuisinetype = json_cuisinetype["cuisine_types"].arrayValue

            if let cuisinetype_name = cell.label_cuisinetypename 

                cuisinetype_name.text = cuisinetype[indexPath.row]["name"].stringValue
                cuisinetype_name.font = Common.Config.FontSize.XL_L
            
            return cell
        

        else 
            let cell = UITableViewCell()
            return cell
        

    


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

        if (tableView == self.tableview_quickfilters) 

            print(indexPath)

            //let cell = tableView.cellForRow(at: indexPath) as! QuickFiltersCell

         else if (tableView == self.tableview_cuisinetype) 

            print(indexPath)

            //let cell = tableView.cellForRow(at: indexPath) as! CuisineTypeCell

        

    


【问题讨论】:

如何呈现第二个表格视图?包含它的视图是否允许用户交互? func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int // 如果检查表的条件并给出它的返回值 在哪个控制器中,Didselect 方法不起作用? 我删除了一张表并留下了一张但仍然不起作用,我添加 self.view.isUserInteractionEnabled = true 也不能。我可以在 tableview 中选择行,当我点击时该行将显示为灰色,但不调用 didSelectRowAt indexPath 两个控制器都不工作 【参考方案1】:

您很可能在某处添加了一个点击手势来取消单元格点击。在这里查看答案:https://***.com/a/9248827/1286291

【讨论】:

以上是关于UITableView didSelectRowAt indexPath 未在自定义单元格中调用的主要内容,如果未能解决你的问题,请参考以下文章

从选定索引处的表视图中的数组中删除

将数据从 didSelectRowAtIndexPath 传递到另一个视图控制器 ios7

连接 UITableView + UITableView

将 UITableView 推送到 UITableView

UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview

UITableView