Перебор 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, а все остальные индексы пусты. Любое предложение будет приветствоваться

0 ответов

Другие вопросы по тегам