如何在UITableViewCell的某个位置禁用用户交互?

时间:2016-09-29 13:49:02

标签: ios uitableview

我的UITableView UITableViewCell accessoryViewUIButton。当用户按下此UIButton时,将触发操作。它工作得很好,但有一个不方便:accessoryView没有粘在单元格的右边缘,所以当用户按下单元格的最右边时,按钮不会被触发而且更糟糕的是:单元格是选中,触发不需要的操作。

以下是我定义细胞的方法:

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier")

    let accessoryButton = MyCustomAccessoryView(frame: CGRect(x: 0.0, y: 0.0, width: 45.0, height: 45.0))
    accessoryButton.addTarget(self, action: #selector(MyController.accessoryButtonTapped(_:)), for: .touchUpInside)
    cell?.accessoryView = accessoryButton

    return cell
}

MyCustomAccessoryView.swift:

    class MyCustomAccessoryView: UIButton {

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = UIColor.red
    }

    required init?(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)
    }
}

结果如下:

enter image description here

所以我的问题是:有没有办法禁用UITableViewCell最右边的用户互动?

1 个答案:

答案 0 :(得分:0)

您应该添加按钮作为您单元格内容视图的子视图。因此,您可以为按钮设置所需的框架,cell将不会显示额外的空间。

因此,将按钮添加为subview的{​​{1}}。

如果你想将按钮设置为附件视图,那么在第二件事就是在右侧添加另一个contentviewblank label,这样它就不会得到blank view

以上解决方案对您来说更好,而不是管理复杂的东西,例如 - 禁用特定区域的click等等!