如何从用户功能获取对单元格的引用

时间:2017-01-20 14:14:04

标签: ios uitableview swift3 tableviewcell

我用UILabel和Button创建自定义单元格。在我的控制器中连接UIButton作为操作后。如果触摸按钮它会改变图像的用途,但我想要的是,触摸后也可以改变UILabel的背景颜色。如何引用我的自定义单元格。

@IBAction func selectCell(_ sender: UIButton) {
    if sender.imageView?.image == UIImage(named: "do") {
        sender.setImage(UIImage(named: "done"), for: .normal)
    } else {
        sender.setImage(UIImage(named: "do"), for: .normal)
    }
}

1 个答案:

答案 0 :(得分:1)

为什么不使用委托系统?这样您就可以轻松获得对细胞的引用。

在你的cell.swift

@objc protocol CellDelegate: class {
    func buttonPressed(forCell cell: Cell)
}

然后在你的单元类中:你需要有一个委托属性,你的IBAction方法,以及一种设置你的委托的方法:

class Cell {

    fileprivate weak var delegate: CellDelegate? = nil


    func setup(withDelegate delegate: CellDelegate) {
        self.delegate = delegate
    }


    @IBAction func deleteButtonPressed(_ sender: Any) {
        if sender.imageView?.image == UIImage(named: "do") {
            sender.setImage(UIImage(named: "done"), for: .normal)
        } else {
            sender.setImage(UIImage(named: "do"), for: .normal)
        }

        delegate?.buttonPressed(forCell: self)
    }

}

最后在TableViewController中:您需要在配置单元格期间将委托设置为self,并实现委托方法:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = viewModel.cellIdentifier(for: indexPath)

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

            cell.setup(withDelegate: self)

        return cell
    }


extension: TableViewController: CellDelegate {

    func buttonPressed(forCell cell: Cell) {
        //Do what you want
    }

}

这就是我如何为细胞设定行动