Загрузить галочки в Tableview для ранее выбранных строк (утвержденные пользователи)

Прямо сейчас я могу добавить галочки в таблицу выбора, выбранную с использованием вашего подхода vadian. Я также добавил Boolean("selected") в свой класс данных. Чего я не понимаю, так это того, как сохранить логическое значение, выбранное для каждой строки с помощью UserDefaults, или как загрузить его в ячейку для строки в таблице. Нужно ли мне вообще касаться раздела didload?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? TableCell else {

        return UITableViewCell()
    }
                  let product = products[indexPath.row]
    cell.accessoryType = product.selected ? .checkmark : .none

return cell   }



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? TableCell else {



        return UITableViewCell()
    }

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

    var selected = products[indexPath.row].selected
    products[indexPath.row].selected = !selected
    tableView.reloadRows(at: [indexPath], with: .none)

    if selected != true {print("selected", indexPath.row, selected )}
    else {print("selected", indexPath.row, selected )}

    selected = UserDefaults.standard.bool(forKey: "sound")
}

person Josiah Savino    schedule 19.11.2017    source источник


Ответы (1)


  • Добавьте свойство var approved : Bool в свою модель данных
  • Обновите свойство в модели при изменении выбора и перезагрузите строку.
  • В cellForRow ставим галочку в зависимости от свойства

    ...
    let cell = tableview.dequeueReusableCell(withIdentifier: "myfeedTVC", for: indexPath) as! MyFeedTVC
    let user = userDataArray[indexPath.row]
    cell.accessoryType = user.approved ? .checkmark : .none  
    ...
    
person vadian    schedule 19.11.2017
comment
Спасибо, что нашли время ответить, я очень ценю это. поэтому добавьте var Verified : Bool в разделе viewdidload или выше? Как обновить свойство в модели при изменении выбора? Я предполагаю, что использую didselectrow, чтобы каким-то образом установить логическое значение каждого? Не уверен, как заставить его перезагрузить эту строку. Он делает это автоматически? - person Josiah Savino; 19.11.2017
comment
Нет, вы должны добавить свойство в свою модель данных (элементы в массиве источника данных). Каждый элемент имеет собственное значение approved. Вы можете перезагрузить одну строку с помощью tableView.reloadRows..., и вы должны сделать это явно в didSelect (и, возможно, также в didDeselect) - person vadian; 19.11.2017
comment
Не могли бы вы показать мне, как сделать 1-ю и 2-ю пули. Я думаю, что понимаю, что вы делаете 3-го числа, так как вы предоставили код, показывающий мне. :) - person Josiah Savino; 19.11.2017
comment
Пожалуйста, взгляните на stackoverflow.com/questions/46397812/ - person vadian; 19.11.2017
comment
Можно ли использовать методику в моем вопросе? Поскольку я могу успешно загрузить, какая строка пути индекса выбрана с использованием пользовательских значений по умолчанию, могу ли я вместо этого сохранить строку или логическое значение true и добавить ее в массив вместо использования indexpath.row, поэтому вместо [0,1] я бы загрузил [правда правда] . Чем, если indexpath.row = true, показывать галочку, иначе галочку не показывать?? - person Josiah Savino; 19.11.2017
comment
Я думаю, это возможно, но для конкретного решения информация и код в вопросе слишком расплывчаты, и я боюсь, что SO не является службой написания кода. - person vadian; 19.11.2017