Я просто меняю свое изображение 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()
}
Я просто хочу изменить изображение при щелчке по ячейке одним выбором
@BenRockey Я уже проверил это. но это слишком долго. Теперь все работает нормально. Sh_Khan решил мою проблему. Спасибо за ответ.
Заменять
let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! PaymentCell
с участием
guard let cell = tableView.cellForRow(at:indexPath) as? PaymentCell else { return }
но лучше изменить свою модель на новое изображение в этом indexPath, а затем перезагрузить tableView, чтобы избежать проблем с удалением из очереди.
Вы можете обработать выбор кнопки в своем 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)
}
Используйте свойство в контроллере представления, в котором будут храниться сведения о текущем выбранном индексе.
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
}
Измените метод ниже как
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedIndexPath = indexPath
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
selectedIndexPath = nil
}
Это не вызовет проблем, связанных с перезагрузкой ячеек. Надеюсь это поможет.
Проверь это. stackoverflow.com/a/54303051/6783598