如何在按下按钮时在UITableviewCell中显示自定义视图?

时间:2016-04-10 14:28:34

标签: ios swift uitableview

我最近开始学习iOS开发,但遇到了一些问题。

我有自定义单元格的tableview:标签,图像视图(默认隐藏)和一个按钮。 我想让它工作,以便当单击按钮单元格时,将显示图像视图。 问题是每次重复使用单元时,都会显示重用单元的图像视图。 我想让它工作,这样如果按下第一个单元格的按钮,则只显示第一个单元格图像视图。如果按下第一个和第三个单元格的按钮,则图像视图应仅显示第一行和第三行,而不显示任何其他行。

我目前的解决方案:

class CustomTableViewCell: UITableViewCell {

    @IBOutlet var cellTitleLabel: UILabel!
    @IBOutlet var cellImageView: UIImageView!
    var showImageView = false


    @IBAction func showImageViewAction(sender: UIButton) {
        showImageView = true
        displayCell()
    }

    func displayCell() {
        if showImageView {
            cellImageView.hidden = false
        } else {
            cellImageView.hidden = true
        }
    }
}

对于视图控制器:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 30
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomTableViewCell

    return cell
}

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    let customCell = cell as! CustomTableViewCell
    customCell.displayCell()
}

有关如何创建以便在重复使用单元格时隐藏图像视图的任何建议吗?

1 个答案:

答案 0 :(得分:1)

如果您必须保存cellImageview.hidden状态,请执行以下操作:

添加协议以通知MainClass按下actionButton:

protocol customCellDelegate{
    func actionButtonDidPressed(tag: Int, value: Bool)
}

比你的CustomTableViewCell声明

var delegate: customCellDelegate?

并在@IBAction func showImageViewAction(sender: UIButton)添加:

@IBAction func showImageViewAction(sender: UIButton) {
   cellImageView.hidden = ! cellImageView.hidden
   delegate?.actionButtonDidPressed(self.tag, value: imageCell.hidden)
}
在mainView中

使其符合customCellDelegate

var status = [Bool]()

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let rowCount = 100
    for _ in 0 ..< rowCount{
        status.append(true)
    }
    return rowCount
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! customcell
    cell. cellImageView.hidden = true
    cell. cellImageView.hidden = status[indexPath.row]
    cell.delegate = self
    cell.tag = indexPath.row

    return cell
}

func actionButtonDidPressed(tag: Int, value: Bool) {
    status[tag] = value
}