Comment garder cohérent le comportement d'un bouton d'arrêt d'enregistrement / d'enregistrement dans une cellule personnalisée en Swift ?

Zenman C

J'ai un bouton d'enregistrement dans une cellule personnalisée dans un UITableView avec deux images - lorsque vous appuyez sur le bouton, il affiche l'image pour "arrêter" l'enregistrement et lorsque vous arrêtez l'enregistrement, il vous montre l'image pour "enregistrer". Cependant, lorsque j'appuie sur le bouton d'enregistrement, l'image d'arrêt change sur une autre ligne du tableau et non sur le bouton de la cellule que je viens d'appuyer.

J'ai essayé de rendre le comportement du bouton cohérent en utilisant une méthode de protocole délégué pour configurer la cellule personnalisée. Mais cela n'a pas résolu le problème.

Le code de la cellule personnalisée (CreateStoryCell) est le suivant :

import UIKit


protocol createStoryCellDelegate {
func didRecord(sender: UIButton, storyItem: StoryItem)
}

class CreateStoryCell: UITableViewCell {


@IBOutlet weak var storyCellBackground: UIView!


@IBOutlet weak var storyTextLabel: UILabel!


@IBOutlet weak var record: UIButton!

var storyItem : StoryItem!
var delegate: createStoryCellDelegate?

func setStoryItem(storyPart: StoryItem) {
    storyItem = storyPart
    storyTextLabel.text = storyItem.text

}

@IBAction func recordTapped(_ sender: UIButton) {

    delegate?.didRecord(sender: sender, storyItem: storyItem)
}

}

L'extension pour la configuration de la cellule pour tableView est ici :

extension CreateStoryViewController : UITableViewDataSource {


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "createStoryCell", for: indexPath) as! CreateStoryCell

        let storyItem = storyText?[indexPath.row]

        cell.setStoryItem(storyPart: storyItem!)        

        cell.delegate = self

    return cell
}


}

Et la méthode didRecord est ici :

extension CreateStoryViewController : createStoryCellDelegate {

func didRecord(sender: UIButton, storyItem: StoryItem) {

    if recordToggle == 1 {

        sender.setImage(UIImage(named: "recordStop"), for: .normal)

      checkRecording(storyItem: storyItem)

      audioRecorder.record()

        recordToggle = 2


    } else {

        sender.setImage(UIImage(named: "smallMicBtn"), for: .normal)

        audioRecorder.stop()

        recordToggle = 1


    }

}

}

Veuillez également noter que la méthode déléguée ci-dessus commence à fonctionner jusqu'à ce que j'insère la fonctionnalité d'enregistrement, c'est-à-dire dès que je rends actives les lignes 'audioRecorder.record()' et 'audioRecorder.stop(), le comportement du bouton devient incohérent comme décrit ci-dessus.

Auparavant, j'ai essayé de mettre en œuvre cela en convertissant la position du bouton d'enregistrement en un indexPath avec les éléments suivants :

//        let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to: self.createStoryTableView)
//        let indexPath = self.createStoryTableView.indexPathForRow(at: buttonPosition)
//        let storyItem = self.storyText?[indexPath?.row ?? 0]

Mais j'ai le même comportement.

Je serais reconnaissant pour toute suggestion sur la façon de résoudre. Merci.

Milan

Je recommande d'introduire une nouvelle variable var isRecording = falsedans votre StoryItem et de modifier sa valeur en cliquant sur le bouton démarrer/arrêter l'enregistrement et de recharger cette cellule particulière. Dans votre cellForRowAt utilisez ceci

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
 let storyItem = self.storyText?[indexPath?.row ?? 0] 
 let image = (storyItem. isRecording == true) ? (UIImage(named:"stopImage")) : (UIImage(named: "startImage")) 
 cell.record.setImage(image, for: .normal) 
 return cell
}

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive