Перебор UITableViewCell для AVSpeechSynthesizer
Я повсюду видел, что перебирать tableView - плохая практика, но я боюсь, что у меня нет другой альтернативы. Я хочу, чтобы AVSpeechSynthesizer считывал содержимое меток, которые находятся внутри моих пользовательских UITableViewCells. Конечно, это можно сделать напрямую, используя исходный массив tableView, но проблема в том, что я хочу, чтобы синтезатор считывал метки и в то же время выделял произносимые слова. Я провел несколько тестов, но проблема в том, что, поскольку ячейки повторно используются табличным представлением, я получаю пустые ячейки...
Как правильно убедиться, что мои клетки не пусты? Я попытался прокрутить tableView, чтобы убедиться, что ячейки не пусты, но они тоже не работают.
Вот мой код пока...
func scrollToRow(rowToGo: Int) {
self.collectionView.scrollToItem(at: self.indexPath as IndexPath, at: .centeredVertically, animated: true)
let colorCell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "ColorCell", for:indexPath as IndexPath ) as! ColorCell
let myString = colorCell.colorLabel.text!
print(myString)
self.speakString(sender: self, str:(myString))
}
@IBAction func playPauseButton(_ sender: UIButton) {
if !self.speechSynthesizer.isSpeaking{
let btnImage = UIImage(named: "pausedButton.png")
self.playPauseButton.setImage(btnImage , for: UIControlState.normal)
self.isPaused = false
// var indexPath:Double = 0
self.indexPath = NSIndexPath(row: 0, section: 0)
for i in 0...36 {
print(i)
self.indexPath = NSIndexPath(row: i, section:0)
self.scrollToRow(rowToGo:i)
// self.indexPath = NSIndexPath(index:i)
// self.collectionView.selectItem(at: indexPath as IndexPath, animated: true, scrollPosition: .centeredVertically)
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt
indexPath: IndexPath) -> UICollectionViewCell {
let myCell = collectionView.dequeueReusableCell(withReuseIdentifier:
"ColorCell", for: indexPath) as! ColorCell
myCell.colorLabel.text = self.wordList[indexPath.row]
myCell.colorImage.image = self.images[indexPath.row]
return myCell }
Мой collectionView отображается правильно, и все мои метки внутри UICollectionViewCells содержат текст. Однако, когда я нажимаю кнопку воспроизведения, в первый раз ничего не говорится. Если я прокручиваю назад и нажимаю снова, на самом деле существуют только 3 или 4 ячейки и печатаются и произносятся их label.text, а все остальные индексы пусты. Любое предложение будет приветствоваться