需求:選中答題卡中一個選項,下次進入答題卡,選中的題在屏幕中.
因為要實現(xiàn)選中的滾動居中效果,使用tableView在cell內(nèi)部添加Button的方式很難實現(xiàn)(嘗試無果后放棄),只能使用CollectionView來實現(xiàn).具體實現(xiàn)代碼:
1.自定義header和cell
collectionView.register(AnswerCardCollectionViewCell.self, forCellWithReuseIdentifier: "answerCardCellId")
collectionView.register(AnswerCardHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header")
// DataSource
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {? ? ? ? let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "answerCardCellId", for: indexPath) as! AnswerCardCollectionViewCell
? ? ? ? cell.configData(model: sourceArray[indexPath.section].userAnswers[indexPath.row], fromePage: type, index: String(indexPath.row + 1))
? ? ? ? return cell
? ? }
? ? func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
? ? ? ? if kind == UICollectionView.elementKindSectionHeader {
? ? ? ? ? ? let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header", for: indexPath) as! AnswerCardHeaderView
? ? ? ? ? ? header.configHeaderData(model: sourceArray[indexPath.section])
? ? ? ? ? ? return header
? ? ? ? } else {
? ? ? ? ? ? return UICollectionReusableView()
? ? ? ? }
? ? }
2.計算headView的高
// 實現(xiàn)UICollectionViewDelegateFlowLayout代理方法
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
? ? ? ? var height: CGFloat = 0
? ? ? ? if (sourceArray[section].titel ?? "").isEmpty {
? ? ? ? ? ? return CGSize(width: SCREEN_WIDTH, height: height)
? ? ? ? } else if (sourceArray[section].projectInro ?? "").isEmpty {
? ? ? ? ? ? height = 56
? ? ? ? ? ? return CGSize(width: SCREEN_WIDTH, height: height)
? ? ? ? } else {
? ? ? ? ? ? let proInroH = (sourceArray[section].projectInro ?? "").getHeight(font: UIFont.systemFont(ofSize: 14), width: SCREEN_WIDTH - 40, lineSpacing: 1.5)
? ? ? ? ? ? height = 66 + proInroH
? ? ? ? ? ? return CGSize(width: SCREEN_WIDTH, height: height)
? ? ? ? }
? ? }
3.滾動CollectionView
collectionView.scrollToItem(at:IndexPath(item: row, section: section), at: .centeredVertically, animated:false)