あひる裁縫店

好きなこと、技術のこと、くだらないこと

【Swift】CollectionViewでVoiceOverを設定した時にフォーカスがずれる

CollectionViewをVoiceOverに対応する時に、つまづいた点。



作っていたものは、

  • 選択したチェックが入るようなもの(1つのみ選択可)

ごくごく普通の機能ですね。



しかし、選択するとフォーカスがずれて、選択していないところまで呼ばれてしまう。
(フォーカスがずれたものを読み上げた後、選択したものを読み上げ のような状態に)



この原因は、CollectionView自体をreloadしていたため。


変更があった部分のみをreloadするように修正すると、この状態は直る。



コードで書くとこんな感じ。

// ダメだったコード
CollectionView.reloadData()

// 修正後のコード
CollectionView.reloadItem(at: [oldIndexPath, newIndexPath])


そもそも一箇所変更されただけで、全体を再読み込みするのはやめましょう。
(自戒の念を込めて)