我到处都看到迭代通过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。 任何建议都会受到欢迎