У меня есть кнопка записи в пользовательской ячейке в UITableView с двумя изображениями - когда вы нажимаете кнопку, она показывает изображение для «остановки» записи, а когда вы останавливаете запись, она показывает вам изображение для «записи». Однако, когда я нажимаю кнопку записи, изображение остановки изменяется на другой строке в виде таблицы, а не на кнопке ячейки, которую я только что нажал.
Я попытался согласовать поведение кнопки, используя метод протокола делегата для настройки пользовательской ячейки. Но это не решило проблему.
Код для пользовательской ячейки (CreateStoryCell) выглядит следующим образом:
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)
}
}
Расширение для настройки ячейки для tableView находится здесь:
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
}
}
А метод didRecord находится здесь:
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
}
}
}
Обратите также внимание, что вышеуказанный метод делегата начинает работать до тех пор, пока я не вставлю функциональность записи, т. Е. Как только я активирую строки audioRecorder.record () и audioRecorder.stop (), поведение кнопки становится противоречивым, как описано выше.
Ранее я пытался реализовать это путем преобразования позиции кнопки записи в indexPath с помощью следующего:
// let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to: self.createStoryTableView)
// let indexPath = self.createStoryTableView.indexPathForRow(at: buttonPosition)
// let storyItem = self.storyText?[indexPath?.row ?? 0]
Но у меня такое же поведение.
Буду благодарен за любые предложения о том, как решить. Спасибо.