TableView _:didSelectRowAt:仅在滑动触摸时触发

时间:2019-05-06 10:19:22

标签: ios swift uitableview

我正在显示具有默认单元格的UITableView和值为true的isEditing / allowsMultipleSelection。 在_:viewForHeaderInSection:上,我为CustomView设置了一个自定义委托,以获取有关此视图更改的反馈。

当用户点击一个单元格时,该单元格将变为选定的颜色,但是当用户释放该单元格时,此单元格将变为未选中状态,此时_:didSelectRowAt:尚未触发。

当用户点击单元格并进行滑动(轻击,按住和移动)手势时,将选中该单元格并触发_:didSelectRowAt:

我需要正常的tableView行为(点击选择),并进行多项选择。

我尝试删除此视图上的所有其他委托(包括本节标题的自定义视图),完全删除自定义标题视图,从我的.xib中删除UITableView并再次添加它,在设置tableview时更改位置,将isEditingallowsMultipleSelection属性设置为false

设置TableView

private func setupTableView() {
   self.tableView.delegate = self
   self.tableView.dataSource = self
   self.tableView.tableFooterView = UIView()

   self.tableView.isEditing = true
   self.tableView.allowsMultipleSelection = true
   self.tableView.allowsMultipleSelectionDuringEditing = true
}

tableview委托和数据源

    @IBOutlet weak var tableView: UITableView!

    private let header = TableViewHeader()


    [...]


    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return datasource.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = UITableViewCell()
        cell.textLabel?.text = dataSource[indexPath.row].title
        return cell
    }
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        self.header.delegate = self
        return self.header.view
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let selectedRows = tableView.indexPathsForSelectedRows {
            if selectedRows.count > 5 {
                tableView.deselectRow(at: indexPath, animated: true)
            }
        }
    }

我确实从视图中删除了一个自定义的UITapGestureRecognizer,现在可以正常工作了!

1 个答案:

答案 0 :(得分:2)

请检查是否已在该视图控制器上应用了轻击手势,因为它会阻止您进入tableView选择。

通过遵循轻击手势委托方法代码,您可以取消阻止tableView选择。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if([touch.view isDescendantOfView:YOUR_TABLE_NAME])
    {
        return NO;
    }
    return YES;
}