Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios DidSelect高亮显示更改视图颜色无效_Ios_Swift_Collectionview - Fatal编程技术网

Ios DidSelect高亮显示更改视图颜色无效

Ios DidSelect高亮显示更改视图颜色无效,ios,swift,collectionview,Ios,Swift,Collectionview,我有一个集合视图,其中每个单元格中都有一个背景视图。所以,每当用户选择任何单元格时,特定的单元格视图背景颜色都会改变 但现在的问题是它的背景颜色正在改变…但是如果我选择了另一个单元格,以前选择的单元格视图背景颜色应该会改变为正常颜色。这是不会发生的 上一个单元格视图的背景色也仍为选定状态 这是我的vcdidselectmethod: let cell = chartCollectionView.cellForItem(at: indexPath) as? UserDataVC var data

我有一个集合视图,其中每个单元格中都有一个背景视图。所以,每当用户选择任何单元格时,特定的单元格视图背景颜色都会改变

但现在的问题是它的背景颜色正在改变…但是如果我选择了另一个单元格,以前选择的单元格视图背景颜色应该会改变为正常颜色。这是不会发生的

上一个单元格视图的背景色也仍为选定状态

这是我的vc
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
但上一个选定的单元格仍然高亮显示。我需要高亮显示我正在选择的单元格