Ios DidSelect高亮显示更改视图颜色无效
我有一个集合视图,其中每个单元格中都有一个背景视图。所以,每当用户选择任何单元格时,特定的单元格视图背景颜色都会改变 但现在的问题是它的背景颜色正在改变…但是如果我选择了另一个单元格,以前选择的单元格视图背景颜色应该会改变为正常颜色。这是不会发生的 上一个单元格视图的背景色也仍为选定状态 这是我的vcIos DidSelect高亮显示更改视图颜色无效,ios,swift,collectionview,Ios,Swift,Collectionview,我有一个集合视图,其中每个单元格中都有一个背景视图。所以,每当用户选择任何单元格时,特定的单元格视图背景颜色都会改变 但现在的问题是它的背景颜色正在改变…但是如果我选择了另一个单元格,以前选择的单元格视图背景颜色应该会改变为正常颜色。这是不会发生的 上一个单元格视图的背景色也仍为选定状态 这是我的vcdidselectmethod: let cell = chartCollectionView.cellForItem(at: indexPath) as? UserDataVC var data
didselectmethod
:
let cell = chartCollectionView.cellForItem(at: indexPath) as? UserDataVC
var data = [String: Any]()
data["selectedCell"] = true
cell?.set(dataSource: data)
我的收藏视图单元格:
class userCell: CollectionViewCell {
override func set(data: [String : AnyObject]) {
if let selectedCell = data["selectedCell"] as? Bool {
if selectedCell {
mainView.backgroundColor = UIColor.red
}
}
}
}
任何解决方案都会有帮助什么是
mainView
?通常,您应该更改单元格的
contentView
或为单元格指定backgroundView
和selectedBackgroundView
。另外,我会使用不同的方法来更改内容以响应事件:
我决不会通过向下投射来直接改变单元格。
相反,我会更改用于初始化单元格的数据,然后重新加载要更改的单元格,然后根据需要使用
collectionView(uu:cellForItemAt:)
这样,您就不需要向下转换。什么是
mainView
?通常,您应该更改单元格的
contentView
或为单元格指定backgroundView
和selectedBackgroundView
。另外,我会使用不同的方法来更改内容以响应事件:
我决不会通过向下投射来直接改变单元格。
相反,我会更改用于初始化单元格的数据,然后重新加载要更改的单元格,然后根据需要使用
collectionView(uu:cellForItemAt:)
这样,您就不需要向下转换。您当前的实现非常差。
我建议将高亮显示的单元格索引保存为属性,并在其出列时访问它以高亮显示或取消高亮显示。例如:
// Your CollectionView Delegate class
var currentHighlightedCellIndex: Int?
然后,在您的收藏视图(\uu:cellForItemAt:)
:
在您的收藏视图中(uquo:didSelectItemAt:)
:
您可以在自定义集合视图单元类中设置一个观察到的属性,该属性将控制背景颜色,如下所示:
// Custom cell class
var selectedCell: Bool = false {
didSet {
self.mainView.backgroundColor = selectedCell ? .red : .white
}
}
您当前的实现非常差。
我建议将高亮显示的单元格索引保存为属性,并在其出列时访问它以高亮显示或取消高亮显示。例如:
// Your CollectionView Delegate class
var currentHighlightedCellIndex: Int?
然后,在您的收藏视图(\uu:cellForItemAt:)
:
在您的收藏视图中(uquo:didSelectItemAt:)
:
您可以在自定义集合视图单元类中设置一个观察到的属性,该属性将控制背景颜色,如下所示:
// Custom cell class
var selectedCell: Bool = false {
didSet {
self.mainView.backgroundColor = selectedCell ? .red : .white
}
}
我需要传递数据源,并且需要在我的集合视图级别中处理它。是否可能。用我的didselect代码逻辑?@teja你说的“你需要传递数据源”是什么意思?我真的不明白这是如何回答这个问题的。虽然作者的编码方法有问题,但这个问题在某种程度上仍然有效,您的答案都是关于如何跟踪突出显示的单元格,与手头的问题无关。此外,即使单元格不可见,也不能保证它不会持久存在(它恰好以这种方式工作,但没有记录),因此在理论上和未来的iOS版本中,可能会有其他单元格保留此属性。另一种方法是重新加载以前选择的单元格和新单元格。@Eilon如果用户选择了单元格,我将在didselectmethod中突出显示。像这样
let cell=chartCollectionView.cellForItem(at:indexPath)as?userCELL cell?.mainView.backgroundColor=UIColor.red
但仍高亮显示上一个选定的单元格。我需要高亮显示我正在选择的单元格。我需要传递数据源,并需要在我的集合视图级别处理它。可能吗。用我的didselect代码逻辑?@teja你说的“你需要传递数据源”是什么意思?我真的不明白这是如何回答这个问题的。虽然作者的编码方法有问题,但这个问题在某种程度上仍然有效,您的答案都是关于如何跟踪突出显示的单元格,与手头的问题无关。此外,即使单元格不可见,也不能保证它不会持久存在(它恰好以这种方式工作,但没有记录),因此在理论上和未来的iOS版本中,可能会有其他单元格保留此属性。另一种方法是重新加载以前选择的单元格和新单元格。@Eilon如果用户选择了单元格,我将在didselectmethod中突出显示。像这样let cell=chartCollectionView.cellForItem(at:indexPath)as?userCELL cell?.mainView.backgroundColor=UIColor.red
但上一个选定的单元格仍然高亮显示。我需要高亮显示我正在选择的单元格