Одиночный выбор не работает в UITableview - PullRequest
0 голосов
/ 29 мая 2019

Я просто меняю свое изображение на UIButton Когда я нажимаю на ячейку. Функция вызывает, но Image не меняется. И я хочу сделать Single Selection.


 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! PaymentCell
        cell.btnCheckUnCheck.setImage(UIImage(named: "CheckTerm"), for: .normal)
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! PaymentCell
        cell.btnCheckUnCheck.setImage(UIImage(named: "uncheckTerm"), for: .normal)
        tableview.reloadData()
    }



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

Ответы [ 3 ]

2 голосов
/ 29 мая 2019

Заменить

let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! PaymentCell

с

guard let cell = tableView.cellForRow(at:indexPath) as? PaymentCell else { return }

но лучше изменить вашу модель на новое изображение с этим indexPath, а затем перезагрузить tableView, чтобы избежать проблем с удалением из очереди

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

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

var selectedIndexPath : IndexPath?

В cellForRowAt метод UITableView

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! PaymentCell
            if selectedIndexPath != nil && indexPath == selectedIndexPath {
                cell.btnCheckUnCheck.setImage(UIImage(named: "CheckTerm"), for: .normal)
            } else {
                cell.btnCheckUnCheck.setImage(UIImage(named: "uncheckTerm"), for: .normal)
            }
        return cell
    }

Изменить ниже методas

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedIndexPath = indexPath
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        selectedIndexPath = nil
    }

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

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

Вы можете обработать выбор кнопки в вашем PaymentCell:

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // get image according to cell selection
    let image = selected ? UIImage(named: "CheckTerm") : UIImage(named: "uncheckTerm")
    // update button image
    btnCheckUnCheck.setImage(image, for: .normal)
}

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