标签值与collectionView.reloadItems重叠[at:[indexPath]]

时间:2018-10-24 06:09:44

标签: swift label collectionview reloaddata

我有一个带有原型单元格的CollectionView。单元格上有一个标签。标签经常更改值。我用collectionView.reloadItems[at: [indexPath]]重新加载数据,我的问题是,当我使用此方法更新集合视图中的标签时,当标签更新他的值时,我眨眼间就重叠了值:如图所示:

Overlapping value while for a blink of an eye

当我使用方法collectionView.reloadData()时,我没有这个问题。但是更新集合视图需要更多的cpu功能和时间。

更多代码: 在这里,我收集单元格的新数据并将其发送到我的updateCell函数:

let btesMeter:[UInt8] = [data![7], data![6], data![5], data![4]]
                let resultMeter = (UInt32(btesMeter[3]) << 24) + (UInt32(btesMeter[2]) << 16) + (UInt32(btesMeter[1]) << 8) + UInt32(btesMeter[0])
                let tempresultMeter = resultMeter / 1000
                updateCell(cellname: "Kilometerstand", newValue: String(tempresultMeter))

这是我的UpdateCel函数:

  func updateCell(cellname: String, newValue: String) {
    let cell = cellname
    if let cellname = periodicData.first(where: {$0.title == cell}) {
        if cellname.value == newValue {
            return
        } else {
            cellname.value = newValue
            if let indexOf = periodicData.firstIndex(where: {$0.title == cell}) {
                // Reload the index
                let indexPath = IndexPath(item: indexOf, section: 0)
                let array:[IndexPath] = [indexPath]
                collectionView.reloadItems(at: array)
            }
        }
    }
}

cellForItemAt:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCollectionViewCell
    cell.labelTitle.text = periodicData[indexPath.row].title

    cell.labelValue.text = periodicData[indexPath.row].value
    return cell
}

CustomCollectionViewCell:

class CustomCollectionViewCell: UICollectionViewCell {


@IBOutlet weak var labelTitle: UILabel!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var labelValue: UILabel!

}

1 个答案:

答案 0 :(得分:1)

我没有关于您的代码的足够信息,但是这个问题是

$ie = New-Object -ComObject 'internetExplorer.Application'
$ie.Visible= $true # Make it visible

$username="abcde"

$password="12345"

$ie.Navigate("Enter your URL here....")

While ($ie.Busy -eq $true) {Start-Sleep -Seconds 3;}

$usernamefield = $ie.document.getElementByID('txt_username')
$usernamefield.value = "$username"

$passwordfield = $ie.document.getElementByID('txt_password')
$passwordfield.value = "$password"

$Link = $ie.document.getElementByID('submit')
$Link.click()

#$ie.Quit()

可以修复。

  

执行所有必要的清理工作,以准备使用视图again

在您的自定义单元格类中覆盖此函数,并清理所有prepareForReuse() , 您具有此功能,将在每次重新加载或出队信元时触发。

您打算做什么的示例。

UILabel

更新:如果上述方法无效,

您可能需要在调用override func prepareForReuse() { super.prepareForReuse() label.text = "" // cleans up the text inside the label to reuse again } 之前清除数据源。

之所以会产生这种效果,是因为用于确定集合视图中项目和节的数量的源中仍然包含旧数据。

一种简单的验证方法是在调用reloadData之前对数据源的内容进行NSLog。

OP

希望这会有所帮助!