CellForItemAt: путь индекса не обновляет переменную - PullRequest
1 голос
/ 25 апреля 2019

Я работаю с UITableView, в котором есть ячейка с переключателем UIS.У меня есть четыре tableViewCell, каждый из той же ячейки прототипа.Однако, когда я переключаю переключатель, единственный способ, которым переменные в разделе TableView CellForItemAt:, - это когда я вытаскиваю tableView так, что он выходит из экрана, и повторно используемые ячейки перезагружаются.Как сделать так, чтобы эти переменные обновлялись при переключении переключателей?

Вот мой код:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "onOffCell", for: indexPath) as! SettingsCellTableViewCell


    if indexPath.section == 0 {
        cell.textLabel?.text = OLLItems![indexPath.row]._text
        if indexPath.row == 0 {
            GlobalData.AllGlobalData.OLLImageState = cell.state //GlobalData.AllGlobalData.OLLImageState is an struct in another file
            print("OLLImageState \(GlobalData.AllGlobalData.OLLImageState)")




        }
        if indexPath.row == 1 {
            GlobalData.AllGlobalData.OLLAlgState = cell.state
            print("OLLAlgState \(GlobalData.AllGlobalData.OLLAlgState)")

        }

    }
    if indexPath.section == 1 {
        cell.textLabel?.text = PLLItems![indexPath.row]._text
        if indexPath.row == 0 {
            GlobalData.AllGlobalData.PLLImageState = cell.state
            print("PLLImageState \(GlobalData.AllGlobalData.PLLImageState)")



        }
        if indexPath.row == 1 {
            GlobalData.AllGlobalData.PLLAlgState = cell.state 
            print("PLLAlgState \(GlobalData.AllGlobalData.PLLAlgState)")

        }

    }
    return cell
}

1 Ответ

0 голосов
/ 26 апреля 2019

Попробуйте сделать это таким образом

Ниже код работает правильно в моем репо, но я немного изменил его, чтобы оправдать ваш сценарий

   override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "switchCell", for: indexPath) as! SwitchContainingTableViewCell

        cell.mySwitch.addTarget(self, action: #selector(switchChanged(_:)), for: .valueChanged)
        return cell
    }

    func switchChanged(_ mySwitch: UISwitch) {

      guard let cell = mySwitch.superview?.superview as? SwitchContainingTableViewCell else {
          return // or fatalError() or whatever
      }

      self.value = mySwitch.isOn   //define var value in your controller or do it locally 

      let indexPath = itemTable.indexPath(for: cell)        

      if indexPath.section == 0 {
          if indexPath.row == 0 {
               GlobalData.AllGlobalData.OLLImageState = self.value
          }
      }
    }

Я добавилцель switch и в цели я получаю измененное состояние переключателя.То же самое можно сделать в cellForItemAt:, используя state = mySwitch.isOn

Надеюсь, это поможет!

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