仅在视图内轻击时才选择表格单元格

时间:2018-03-03 22:18:34

标签: ios swift uitableview

我想创建一个消息传递应用程序,因此我想允许用户选择消息。

问题在于我无法找到一种方法来制作单元格,只有在特定视图中轻触单元格才会选中单元格

我的源代码:

 override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
        let cell = tableView.cellForRow(at: indexPath) as! BubbleCell
        if (cell.messageBubble.wasClicked){ //? somehow
            return indexPath
        } else {
            return nil
        }
    }

就像在信使中一样。

如果单击空白区域,则单元格将不会被选中,但如果在消息气泡上(单元格内部有一个视图)则会被选中。

2 个答案:

答案 0 :(得分:2)

如果我们假装消息气泡是一个按钮,最容易看到如何做到这一点。如果它不是按钮,您可以给它一个轻击手势识别器并获得相同的效果。

首先,使用委托方法来抑制用户点击单元格以选择它的正常能力:

func tableView(_ tableView: UITableView, 
    willSelectRowAt indexPath: IndexPath) -> IndexPath? {
        return nil
}

其次,我们给按钮(或点击手势识别器)一个动作功能。当它触发时,找出按钮所在的单元格并在代码中选择它:

@IBAction func buttonPressed (_ sender:AnyObject) {
    let cell = (sender as! UIView).superview!.superview! as! UITableViewCell
    let row = self.tableView.indexPath(for: cell)!
    self.tableView.selectRow(at: row, animated: true, scrollPosition: .none)
}

在该示例中,我碰巧知道按钮直接位于单元格的内容视图中,因此它是视图层次结构的两个步骤以到达单元格。当然,您可能需要进行调整。

此截屏视频显示结果:尝试单击整个单元格无效,但单击“按钮”区域可选择单元格。

enter image description here

这种方法有效的原因是,当我们在代码中选择行时,我们的willSelectRowAt 被调用 - 仅当用户点击单元格时。

答案 1 :(得分:1)

您可以移除willSelectRowAt方法,并在单元格中添加按钮(或使用UITapGestureRecognizer的视图)。