防止tableview单元格回收标签值

时间:2016-05-26 03:35:54

标签: ios swift uitableview uibutton

我的自定义单元格的tableview包含1 label和1 button。该按钮用于我每次点击它,增加label内的数字,例如,如果我的label值为0,那么每当我点击按钮时它增加1

问题是我有很多数据,例如我有20个,每当我滚动所有值时,我为标签设置了一个值

这是我的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("testCell", forIndexPath: indexPath)

    let pos = cell.viewWithTag(6) as! UIButton

    pos.addTarget(self, action: #selector(testTableViewController.pos(_:)), forControlEvents: .TouchUpInside)
    pos.tag = indexPath.row
    return cell
}

func pos(sender: UIButton) {
    let position: CGPoint = sender.convertPoint(CGPointZero, toView: self.tableView)
    let indexPath = self.tableView.indexPathForRowAtPoint(position)
    let cell: UITableViewCell = self.tableView.cellForRowAtIndexPath(indexPath!)! as UITableViewCell

    let countNo = cell.viewWithTag(7) as! UILabel

    var counter:Int = Int(countNo.text!)!
    counter = counter + 1
    countNo.text = String(counter)
}

请帮我解决这个问题。我搜索了很多网络以找到答案,例如make dequeueReusableCellWithIdentifier nil,但是在Swift 2中dequeueReusableCellWithIdentifier从来没有nil而且还有很多没有人工作< / p>

我需要一些提示如何解决这个问题

1 个答案:

答案 0 :(得分:1)

这是你的答案。

初始化一个数组,其数量与tableview的行数相同。最初为每个对象插入值“0”或空白字符串(如果不想在标签中显示任何数字)。

前,

var arrValues:NSMutableArray = NSMutableArray()

    for _ in 1...numberOfrow

        {
            arrValues.addObject("0")
        }

现在在cellForRowAtIndexPath方法中,显示来自此数组的标签文本

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("testCell", forIndexPath: indexPath)

        let pos = cell.viewWithTag(6) as! UIButton
        **let countNo = cell.viewWithTag(7) as! UILabel
        countNo.text = String(arrValues.objectAtIndex(indexPath.row))**

        pos.addTarget(self, action: #selector(testTableViewController.pos(_:)), forControlEvents: .TouchUpInside)
        pos.tag = indexPath.row
        return cell
    }

按钮单击方法使用递增的数字替换特定索引处的对象。请参阅下面的更新方法。

func pos(sender: UIButton) {
        let position: CGPoint = sender.convertPoint(CGPointZero, toView: self.tableView)
        let indexPath = self.tableView.indexPathForRowAtPoint(position)
        let cell: UITableViewCell = self.tableView.cellForRowAtIndexPath(indexPath!)! as UITableViewCell

        let countNo = cell.viewWithTag(7) as! UILabel

        var counter:Int = Int(countNo.text!)!
        counter = counter + 1
        countNo.text = String(counter)
        **arrValues.replaceObjectAtIndex(indexPath.row, withObject: String(counter))**
    }

因此在cellForRowAtIndexPath中,它将在标签文本中显示更新的数字