Передать текстовое значение editDidChange из ячейки TableView в модель - PullRequest
0 голосов
/ 23 января 2020

У меня есть TableView с несколькими разделами, и я хотел бы использовать editDidChange в каждой ячейке для обновления текстовых полей. Я могу достаточно легко передать данные из класса ячейки UITableView в ViewController, который обновит модель массива, однако я не могу придумать, как передать информацию о том, какая ячейка редактируется (и, следовательно, какой индекс в массиве должен быть изменено).

Я использовал sender.tag в аналогичном сценарии ios ранее, однако тег подсчитывается только из каждого раздела, когда задействованы заголовки. Как я могу сказать ViewController, какая ячейка редактируется?

Спасибо!

//TableView cell class

    @IBAction func textField(_ sender: UITextField) {
      updateTextForDelegate.didUpdate(text: sender.text ?? "") //using editingDidChange
    }

enter image description here

Ответы [ 2 ]

1 голос
/ 23 января 2020

В вашем методе cellForRowAt вы можете назначить свой тег textField следующим образом:

cell.yourTextField.tag = (indexPath.section * 100) + (indexPath.row)

Затем в вашем textFieldDidBeginEditing вы можете получить indexPath следующим образом:

func textFieldDidBeginEditing(_ textField: UITextField) {
    let tag = textField.tag
    let sectionBeingEdited = tag / 100
    let rowBeingEdited = tag%100
    let indexPath = IndexPath(row: rowBeingEdited, section: sectionBeingEdited)
    let cell = self.servicesTable.cellForRow(at: indexPath)

    // you have got your cell

}

ПРИМЕЧАНИЕ: это всего лишь взлом, чтобы получить indexPath, учитывая, что максимальное число разделов может быть 100. Вы можете увеличить значение со 100 до любого значения, которое вы хотите.

1 голос
/ 23 января 2020

вы можете использовать это, чтобы получить ячейку indexpath.row, чтобы найти, какая ячейка редактируется.

 func textFieldDidBeginEditing(_ textField: UITextField) {
    var v : UIView = textField
              repeat { v = v.superview! }
              while !(v is UITableViewCell)
              let cell = v as! FeedbackTableViewCell // or UITableViewCell or whatever
              let ip = self.tableview.indexPath(for: cell)
              textField.text = cell.anstxt.text
              // and now we have the index path! update the model
              let arrlist = arrfeedback[ip?.row ?? 0]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...