当相同的collectionView与2个数据源

时间:2018-02-13 09:43:38

标签: ios swift uicollectionview

我在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个按钮,先前选择的单元格仍应处于选定模式。 我该怎么办?

1 个答案:

答案 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
}

希望这会对你有所帮助。