我有一个集合视图,其中的单元格在屏幕上显示设备状态。通过调整单元格的alpha值,缺货的设备将显示为灰色。但当我在屏幕上滚动或点击任何单元格时,单元格将重新加载并丢失设置。代码如下:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "MyCollectionViewCell", for: indexPath) as! MyCollectionViewCell
self.allDevices = self.allDevices.sorted(by: {$0.givenName.lowercased() < $1.givenName.lowercased()})
DispatchQueue.main.async {
let deviceSKU = self.allDevices[indexPath.row].name
let deviceName = self.allDevices[indexPath.row].givenName
var alphaValue = 1.0
var enableValue = true
if self.allDevices[indexPath.row].connectFlag != nil {
alphaValue = (self.allDevices[indexPath.row].connectFlag == "1") ? 1.0 : 0.2
enableValue = (self.allDevices[indexPath.row].connectFlag == "1") ? true : false
}
if deviceSKU == "STS001" {
let deviceImage = (self.allDevices[indexPath.row].state == true) ? UIImage(named: "socket-green.png") : UIImage(named: "socket-red.png")
cell.configure(with: deviceImage!, name: deviceName, offline: alphaValue, enabled: enableValue)
}
if deviceSKU == "DWS01" {
let deviceImage = (self.allDevices[indexPath.row].state == true) ? UIImage(named: "door-close2.png") : UIImage(named: "door-open2.png")
cell.configure(with: deviceImage!, name: deviceName, offline: alphaValue, enabled: enableValue)
}
if deviceSKU == "BWS01" {
let deviceImage = (self.allDevices[indexPath.row].state == true) ? UIImage(named: "wallsocket-on.png") : UIImage(named: "wallsocket-off.png")
cell.configure(with: deviceImage!, name: deviceName, offline: alphaValue, enabled: enableValue)
}
if deviceSKU == "5CHN" {
let deviceImage = UIImage(named: "5Channel.png")
cell.configure(with: deviceImage!, name: deviceName, offline: alphaValue, enabled: enableValue)
}
}
return cell
}
UICollectionViewCell文件中的cell.configure函数:
public func configure(with image: UIImage, name: String, offline : CGFloat, enabled : Bool){
deviceImage.image = image
deviceName.text = name
self.alpha = offline
self.isUserInteractionEnabled = enabled
}
我还将cell.userInteractionEnabled标记为false,但保留了此设置,但cell.alpha设置正在丢失。当加载数据时,最初显示为灰色的单元格,每当我单击屏幕上允许用户交互的任何单元格或滚动时,这些特定单元格将返回正常可见状态,并且当它们开始重新加载alpha = 1时,这些特定单元格将离开可见区域。
1条答案
按热度按时间y53ybaqx1#
因为单元格被重用,所以必须在所有可能的情况下设置状态,而不是在所有
if
语句都为假的情况下重置状态。最好的方法是覆盖自定义单元格类中的
prepareForReuse()
函数。根据需要调整代码。我基于您在
configure
方法中所做的工作来调整这些行。这确保了每个单元在
cellForItemAt
中出队之后被重置为新状态。