свифт 4: кнопка запускает одни и те же действия в другой инструменту uitableviewcell


you can see the picture of what i am talking about here

у меня есть клетка с 2 кнопками (для прослушивания и распознавания речи), метку и текстовое поле. что я пытаюсь достичь, это когда кнопку распознавание речи выбрано пользователем говорит контент, который отображается в метке. моя проблема заключается в том, что кнопка прослушивания работает по indexpath.подряд, но говорить не. а когда он активен, то кнопка в другом ячейки тоже становятся активными. и он записывает в тех же клетках.

методы для прослушивания (что аудио синтезатор) и распознавания речи в инструменту uitableviewcell. я пробовал все решения, которые я мог найти в интернете, никто из них не сделал свое дело. пробовал

protocol repeatcelldelegate: class {    func buttontapped(cell: repeatcell)}

но проблема остается той же. кроме того, создали еще один проект и вместо того, чтобы использовать кнопку, чтобы сделать распознавание речи, я просто использовал прямой ввод текстовое поле, все та же проблема возникает.

кнопка в класс tableviewcell:

@ibaction func speakbuttonpressed(_ sender: any) {self.delegate?.buttontapped(cell: self)

}

cellforrowat indexpath

мое :

let cell = tableview.dequeuereusablecell(withidentifier: "repeatcell") as! repeatcellcell.delegate = selfcell.conditionlabel.text = repeattask[indexpath.row].conditionlabelreturn cell

функция buttontapped, который определяет индекс ячейки и записывать их речи. его отпечатки правого указательного ячейке после нажатия кнопки прослушивается, но действие становится слишком срабатывает в другую ячейку.

func buttontapped(cell: repeatcell) {guard let indexpath = self.repeattv.indexpath(for: cell) else {    return}cell.speakbutton.isselected = !cell.speakbutton.isselectedif (cell.speakbutton.isselected){    self.recordandrecognizespeech()} else {    audioengine.inputnode.removetap(onbus: 0)    recognitiontask?.cancel()}print("button tapped on row \(indexpath.row)")

}

// речевого ввода функции распознавания:

// variables for speech recognizer

пусть audioengine = avaudioengine()давайте speechrecognizer: sfspeechrecognizer? = sfspeechrecognizer(язык: язык.инит(идентификатор: "ан-нас"))пусть запрос = sfspeechaudiobufferrecognitionrequest()вар recognitiontask: sfspeechrecognitiontask?

// речи functionfunc recordandrecognizespeech(){

let node = audioengine.inputnodelet recordingformat = node.outputformat(forbus: 0)node.installtap(onbus: 0, buffersize: 1024, format: recordingformat) { buffer, _ in    self.request.append(buffer)}audioengine.prepare()do {    try audioengine.start()} catch {    return print(error)}guard let myrecognizer = sfspeechrecognizer() else {    return}if !myrecognizer.isavailable {    return}recognitiontask = speechrecognizer?.recognitiontask(with: request, resulthandler: { (result, error) in    if result != nil { //        if let result = result{            let cell = self.repeattv.dequeuereusablecell(withidentifier: "repeatcell") as! repeatcell            let beststring = result.besttranscription.formattedstring            if cell.speakbutton.isselected == true {                cell.userinput.text = beststring            }        }else if let error = error{            print(error)        }    }})

}

я получаю данные из локального файла json и это модель:

struct repeattask: codable {let name: stringlet label: stringlet conditionword: string

}

возможно, кто-то может помочь мне с этим?