Изменить выбранное изображение ячейки - PullRequest
0 голосов
/ 13 мая 2019

Я хочу изменить изображение ячейки, когда играет музыка, я использую didselectrow для этого, когда я выбираю строку, она меняет изображение, и когда я прокручиваю, я вижу, что многие другие ячейки также меняются, я не знаюмой код

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
          let cell = tableView.cellForRow(at: indexPath) as? NaatListTableViewCell
            cell?.btnPlayPause.setImage(UIImage(named: "pause"), for: .normal)

    }

Ответы [ 3 ]

0 голосов
/ 13 мая 2019

Вместо того, чтобы изменять изображение в методе didSelectRowAt, вы можете сделать это другим способом, реализовав метод setSelected(_:animated:) в своем пользовательском UITableViewCell и обработав там статус изображения, т.е.

override func setSelected(_ selected: Bool, animated: Bool) {
    if selected {
        btnPlayPause.setImage(UIImage(named: "pause"), for: .normal)
    } else {
        btnPlayPause.setImage(UIImage(named: "play"), for: .normal)
    }
}

Вышеупомянутый метод обрабатывает выбор и отмену выбора для всех ячеек в режимах tableView в single-selection и multi-selection.

После этого вам не нужно ничего писать в методе tableView(_:didSelectRowAt:).

0 голосов
/ 13 мая 2019

Вам необходимо поддерживать состояние вашей ячейки вручную.У вас могут быть другие данные, связанные с вашей ячейкой, из того, что вы спросили, это выглядит как список музыкальных файлов, вы можете связать с каждой музыкой уникальный идентификатор в ее модели.Теперь создайте карту типа var isPlaying = [Int: Bool]() (при условии, что вы собираетесь использовать int ids)

Затем в didSelectRowAt установите значение с соответствующим идентификатором self.isPlaying[YOUR_ID] = cell.isSelected

Теперь в вашем cellForRowAtметод

var imageName = self.isPlaying[YOUR_ID] ? "play" : "pause"
cell?.btnPlayPause.setImage(UIImage(named: imageName), for: .normal)

0 голосов
/ 13 мая 2019

попробуй:

var isPlayingIndex = -1
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as? NaatListTableViewCell
    if indexPath.row == isPlayingIndex {
        cell?.btnPlayPause.setImage(UIImage(named: "play"), for: .normal)
    }else {
        cell?.btnPlayPause.setImage(UIImage(named: "pause"), for: .normal)
    }
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as? NaatListTableViewCell
    if indexPath.row == isPlayingIndex {
        cell?.btnPlayPause.setImage(UIImage(named: "pause"), for: .normal)
        isPlayingIndex = -1
    } else {
        // stop current player
        //
        isPlayingIndex = indexPath.row
        cell?.btnPlayPause.setImage(UIImage(named: "play"), for: .normal)
    }
}
...