迭代UITableViewCell for AVSpeechSynthesizer

时间:2018-04-16 08:26:50

标签: ios swift uicollectionviewcell 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 个答案:

没有答案