2017-01-19 5 views
-2

Я хочу сделать пользователю несколько вариантов (лет) или выбрать (все), а остальные ячейки исчезнут (галочка). Я хочу, чтобы пользователь не мог отменить каждый (галочка).Как добавить Checkmark TableView Несколько Swift 3.0

Это мой код: -

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
let cell = tableView.cellForRow(at: indexPath) 
cell?.accessoryType = .checkmark 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! yearsCell 
cell.years?.text = Years[indexPath.row] 
return cell } 

enter image description here

enter image description here

+0

Вам нужно указать дополнительную информацию. На что вы надеетесь и что не работает для вас? – Magnas

+0

@Magnas Я хочу получить следующее: - 1. Пользователь может выбрать любое (лет) или Отменить. 2. Когда выбор пользователя (все), остальные исчезают (галочка) всех ячеек. 3. Пользователь не может отменить все (флажок) По умолчанию (Все). –

ответ

2

Способ, которым я делаю это, путем хранения selectedindexPath в массиве, затем перезагрузить tableView, чтобы изменить выбранные ячейки, таким образом вы избегаете проблем с повторным использованием ячеек, это может выглядеть так (un -tested).

var selectedIndexPathArray = Array<NSIndexPath>() 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let cell = tableView.cellForRow(at: indexPath) 
    selectedIndexPathArray.append(indexPath) 
    tableView.reloadData() 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! yearsCell 
    cell.years?.text = Years[indexPath.row] 
    cell.accessoryType = .none 
    for sip in selectedIndexPathArray { 
     if indexPath == sip { 
      cell.accessoryType = .checkmark 
     } 
    } 
    return cell 
} 
+0

Хорошо, но я не могу Множественный выбор в течение многих лет –

+0

@MajedDkahellalah Хорошо, я изменил его как массив, чтобы вы могли выбирать несколько лет. – Wez

+0

Вы также можете написать некоторую логику, чтобы предотвратить дубликаты в 'selectedIndexPathArray' (если пользователь снова нажал на ячейку), а также подумайте над тем, чтобы позволить пользователям удалять выбранные годы. – Wez

0

Клетка для повторного использования. Например, ячейка, используемая для отображения первой строки, может использоваться для отображения 10-й строки при прокрутке вниз. Таким образом, вам нужен магазин массива статус галочки для каждой строки, код вроде:

  • didSelect: массив [indexpath.row] = массив [indexpath.row]
  • cellForRow: setCheckmark (массива [indexpath .row])

MORE: Google, как и почему клетка повторно в Tableview

1

как Итак:

СВИФТ 3

// To checkmark the cell 
let cell = tableView.cellForRow(at:indexPath.row) 
cell.accessoryType = .checkmark 

// To make it unselectable 

Используйте метод tableView:willSelectRowAtIndexPath: и проверить, если indexPath.row является строка для ячейки вы только что выбрали, и return false.

Смежные вопросы