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

У меня есть 3 раздела в моем tableView, я хочу один выбор, например, радиокнопки в каждом разделе. Мой код работает для одного раздела, но не для нескольких разделов. Я не использую никаких пользовательских кнопок для этого, напрямую использую contentView imageView для установки изображений и didSelectRowAt indexPath: для выбора

Мой код

cell?.imageView?.image = UIImage.init(named: "radio1")//Deselected state
cell?.imageView?.tag = indexPath.row
cell?.contentView.viewWithTag(8888)
if (selectedIndexPath != nil && selectedIndexPath?.section == 0 && selectedIndexPath?.row == indexPath.row) {
    cell?.imageView?.image = UIImage.init(named: "radio2")//Selected state
} else {
    cell?.imageView?.image = UIImage.init(named: "radio1")//Deselected state
}
if selectedIndexPath?.section == 1 {
}
if selectedIndexPath?.section == 2 {
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedIndexPath = indexPath//Save selected indexpath
    print(selectedIndexPath)
    tblView.reloadData()

Приведенный выше код получает результат как

Когда я выбираю (Section1, Row0), автоматически выбирается (Section2, Row0). Я хочу выбрать строки индивидуально на основе разделов.

1 Ответ

2 голосов
/ 09 апреля 2019

Для таблицы с одним разделом вы можете использовать selectedIndexPath для сохранения выбранного indexPath. Для просмотра таблицы из нескольких разделов вам нужен массив indexPaths

var selectedIndexPathArr: [IndexPath?] = Array(repeating: nil, count: 3)//3 is number of sections

Затем в методе didSelect сохранить выбранный indexpath в своем разделе index

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedIndexPathArr[indexPath.section] = indexPath//save selected indexpath depends section
    tableView.reloadData()
}

В методе didDeselectRowAt удаляет запечатанный путь индекса из массива

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    selectedIndexPathArr[indexPath.section] = nil//delete selected indexpath depends section
    tableView.reloadData()
}

В методе cellForRowAt сравнение текущего пути индекса с путем индекса из массива зависит от текущего раздела

if selectedIndexPathArr[indexPath.section] == indexPath {
    cell?.imageView?.image = UIImage.init(named: "radio2")//Selected state
} else {
    cell?.imageView?.image = UIImage.init(named: "radio1")//Deselected state
}

enter image description here

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

Вы получите nil, если в конкретном разделе не выбрана ячейка

print(selectedIndexPathArr[0])//first section selected indexpath
print(selectedIndexPathArr[1])//second section selected indexpath
print(selectedIndexPathArr[2])//third section selected indexpath
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...