gpt4 book ai didi

ios - UICollectionView 和 Selected Cell 在滚动时失去选择

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:12 30 4
gpt4 key购买 nike

我有一个 UICollectionView,一切正常,但是,有一件事我无法处理(我不知道如何处理),我有一个单元格集合,以查看用户需要滚动的所有单元格像往常一样向下或向上。

enter image description here

当用户选中单元格时,内容变为“红色”,红色为“选中”单元格,黑色为“未选中”单元格或正常状态。

当被选中的cell落在navigationBar或者TabBar后面时,cell会失去“红色”,重新变成黑色,就像“未选中”一样。

当 uicollectionview 滚动时单元格落后时,我如何保持“红色”?

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell = collectionView.cellForItemAtIndexPath(indexPath)

let icon = cell!.viewWithTag(10) as? UIImageView
icon!.image = icon!.image! .imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
icon!.tintColor = UIColor.redColor()

let label = cell!.viewWithTag(100) as? UILabel
label?.textColor = UIColor.redColor()
//print("Seleccionado")

}

override func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {
let cell = collectionView.cellForItemAtIndexPath(indexPath)

cell!.contentView.backgroundColor = nil
cell!.contentView.layer.borderColor = nil

let icon = cell!.viewWithTag(10) as? UIImageView
icon!.image = icon!.image! .imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
icon!.tintColor = UIColor.blackColor()

let label = cell!.viewWithTag(100) as? UILabel
label?.textColor = UIColor.lightGrayColor()
//print("Unselect")
}

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! ObjectosCollectionViewCell

cell.objectoNameLabel.text = objectosData[indexPath.row]
cell.objectoNameLabel.textColor = UIColor.lightGrayColor()
cell.objectoImageView.image = UIImage(named:objectosImage[indexPath.row])

return cell
}

谢谢

最佳答案

您需要对您的逻辑进行一些修改;

//CollectionViewCell Custom Class
import UIKit

class CollectionViewCell: UICollectionViewCell {

override var selected: Bool {
get {
return super.selected;
}

set {
if (super.selected != newValue) {
super.selected = newValue

let icon = self.viewWithTag(10) as? UIImageView
icon?.image = icon?.image!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)

let label = self.viewWithTag(100) as? UILabel

if (newValue == true) {
icon?.tintColor = UIColor.redColor()
label?.textColor = UIColor.redColor()
} else {
icon?.tintColor = UIColor.blackColor()
label?.textColor = UIColor.lightGrayColor()
}
}
}
} //P.E.

}

然后;

//Define a class variable in your viewController
var cellStatus:NSMutableDictionary = NSMutableDictionary();

//Collection view delegate methods
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

var cell:CollectionViewCell? = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as? CollectionViewCell;

cell!.selected = (cellStatus[indexPath.row] as? Bool) ?? false;

return cell!;
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
//Updating cell status
let cell = collectionView.cellForItemAtIndexPath(indexPath)
cell?.selected = true;

//Updating dic
self.cellStatus[indexPath.row] = true;
}

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {
//Updating cell status
let cell = collectionView.cellForItemAtIndexPath(indexPath)
cell?.selected = false;

//Updating dic
self.cellStatus[indexPath.row] = false;
}

注意:改变图片图标颜色的方法并不好。它占用了过多的处理能力,可能会挂起滚动。每个状态应该使用两个单独的图像。

关于ios - UICollectionView 和 Selected Cell 在滚动时失去选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33326395/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com