我在ViewController上有2个按钮和1个collectionView。单击一个按钮时,collectionView的数据源会更改,并重新加载以更改collectionView单元格中显示的选项,并在单击其他按钮时显示不同的选项。 我想更改用户选择的单元格中标签中文本的字体(此标签位于单元格内)。所以,我为此做了以下
var previouslySelectedCell: IndexPath? = IndexPath(row: 0, section: 0)
var leftOutPreviouslySelectedCell: IndexPath?
在cellForItemAt中:
cell?.frameNameLabel.font = UIFont.Book16
if indexPath == previouslySelectedCell {
cell?.frameNameLabel.font = UIFont.Medium16
}
在didSelectItemAt中:
if previouslySelectedCell != nil {
if let previousCell = collectionView.cellForItem(at: previouslySelectedCell!) as? FramePhotoCell {
previousCell.frameNameLabel.font = UIFont.Book16
} else {
leftOutPreviouslySelectedCell = previouslySelectedCell
}
}
let cell = collectionView.cellForItem(at: indexPath) as! FramePhotoCell
cell.frameNameLabel.font = UIFont.Medium16
previouslySelectedCell = indexPath
在willDisplay中:
if indexPath == leftOutPreviouslySelectedCell {
(cell as! FramePhotoCell).frameNameLabel.font = UIFont.Book16
leftOutPreviouslySelectedCell = nil
}
这种方法的问题在于,如果我在一个集合中选择一个单元格,那么当我点击一个更改其dataSource的按钮时,会出现一个带有新数据的新重新加载的集合视图;似乎也选择/突出显示先前选择的单元格(在先前版本的collectionView中选择),因为该单元格的IndexPath位于先前选定的单元格中。 我不想在切换到另一个collectionView时擦除先前选择的单元格的值,就像用户选择一个单元格然后移动到另一个版本的collectionView一样,然后通过点击返回到先前版本的集合视图给出的2个按钮,先前选择的单元格仍应处于选定模式。 我该怎么办?
答案 0 :(得分:0)
将数组作为arrSelectedIndex
在OnBtnClick
if index is not in array{
1. add index in array
2. reload your data
}
else if index is in array{
1. remove index in array
2. reload your data
}
在cellForRow
cell.btn.tag = indexPath.row
1. check cuurent indexPath is in the `arrSelectedIndex` or not.
2. if step1 true{
show your hightlighted data
}
else{
show default data
}
希望这会对你有所帮助。