DidselectRow委托方法不能在swift中工作

时间:2018-03-13 13:07:13

标签: ios swift uitableview

我有一个警报,其中我使用表视图来显示一些数据。

用户可以从表格视图数据中选择任何项目。

现在,当我尝试选择didSelectRow方法中的任何项目时,它不会选择项目。我也使用了断点,但它也没有抓住断点。

我已经给它的代表和数据源一切都很好,但我很困惑为什么它不起作用?

我的代码是:

extension YourOrdersViewController : UITableViewDelegate, UITableViewDataSource{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return PreOrderService.instance.PreOrderModelInstance.count
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Hello")
        print(PreOrderService.instance.PreOrderModelInstance[indexPath.row].perorder_time)
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        if tableView == orderTableView{
            print("Dishes")
        }
        else{
            orderTableView.cellForRow(at: indexPath)?.accessoryType = .none
        }
    }

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

        let cell = orderTableView.dequeueReusableCell(withIdentifier: "orderCell", for: indexPath) as!
    PreOrderTableViewCell

        cell.titleLbl.text = PreOrderService.instance.PreOrderModelInstance[indexPath.row].perorder_time
        print(cell.titleLbl.text!)
        cell.selectionStyle = .none
        cell.selectionStyle = UITableViewCellSelectionStyle.none
        cell.accessoryType = cell.isSelected ? .checkmark : .none
        return cell
    }
}

View Controller看起来像这样, enter image description here

5 个答案:

答案 0 :(得分:0)

检查或您是否设置了此值: enter image description here 如果设置No Selection而不是Single Selection,则不会执行func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)方法。

答案 1 :(得分:0)

你的UIViewControlller上是否有任何手势识别器。如果确实如此,并且手势识别器位于响应者链上的表视图之上,则只需单击一下即可为表视图留下任何内容。

答案 2 :(得分:0)

我认为代码中的整个问题是:

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

    self.tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark

}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {

    self.tableView.cellForRow(at: indexPath)?.accessoryType = .none

}

答案 3 :(得分:-1)

确保设置了委托和数据源。 如果您通过情节提要板创建视图,请确保为委托/数据源设置iboutlet。

这两行都意味着同样的事情:所以删除第二行。

cell.selectionStyle = .none
cell.selectionStyle = UITableViewCellSelectionStyle.none

答案 4 :(得分:-1)

在Main.storyboard中选择您的表格视图,然后在属性检查器中将选择更改为单一选择