2017-08-17 1 views
1

J'ai une vue de collection avec la pagination activée. J'utilise AVSpeechSynthesizer pour la synthèse vocale dans les cellules de la vue de collection. Je veux que la voix s'arrête quand je glisse d'une cellule à l'autre. En ce moment j'appelle la fonction stopSpeech, qui est déclarée dans la classe de cellules. J'appelle ensuite la fonction dans la méthode didEndDisplayingCell de collectionView.SpeechUtterance ne s'arrête pas

func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 

    let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "detailArticleCell", for: indexPath) as! DetailArticleCell 
    cell.stopSpeech() 
} 

Cela ne fonctionne que toutes les trois cellules. Mais je veux que la voix s'arrête lorsque l'utilisateur passe à la cellule suivante à chaque fois.

+0

Ashiq Sulaiman: combien de cellules sont affichées sur un écran à la fois? – Hooda

+0

@hooda une seule cellule. C'est la pagination activée. –

+0

Pourquoi utilisez ** cell.stopSpeech() ** au lieu de ** stopSpeech() **? – Hooda

Répondre

0

Modifier cette ligne:

let cell=collectionView.dequeueReusableCell(withReuseIdentifier: "detailArticleCell", for: indexPath) as! DetailArticleCell 

à:

if let detailCell = cell as? DetailArticleCell 
{ 
    detailCell.stopSpeech() 
} 

et de voir ce qui se passe. Cette méthode de délégation fournit déjà un paramètre avec la cellule qui n'est plus affichée, il n'est donc pas nécessaire d'appeler dequeueReusableCell (ce qui peut vous donner quelque chose d'inattendu).