Как отправить данные просмотра таблицы на кнопку отправки? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть UITableView с 2 разделами.

Каждый раздел имеет разные ячейки xib (с несколькими текстовыми полями, переключателями и т. Д. c.).

Пользователь может ввести эти значения с помощью клавиатуры.

Как получить значение каждого текстового поля при нажатии кнопки отправки с использованием модели?

Вот мой класс модели для ячейки для подробного раздела :

enter image description here

class DataModel {    
    var name: String?
    var gender: String?


    init(name: String?, gender: String?)
    {
        self.name = name
        self.gender = gender 
    }
}

Как я использую это в моем табличном представлении:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {



            var cell = tableView.dequeueReusableCell(withIdentifier:"DetailCell") as? DetailCell
                     if cell == nil{
                         let arrNib:Array = Bundle.main.loadNibNamed("DetailCell",owner: self, options: nil)!
                         cell = arrNib.first as? DetailCell
                     }
                 let model: DataModel

                   model = DataModel [indexPath.row]

                   //displaying values
                   cell?.name_lbl.text = model.name
                   cell?.gender_lbl.text = model.gender



              return cell!
}

Ответы [ 3 ]

1 голос
/ 28 апреля 2020

Вы можете присвоить тег текстовому полю и использовать UITextFieldDelegate для этого, например,

func textFieldDidEndEditing(_ textField: UITextField) {
    if textField.tag == 0 {
       model.name = textField.text ?? ""
    }
}

при нажатии кнопки «Отправить», вы можете получить доступ к значению модели, например

 @IBAction func submitButtonTapped(_ sender: Any) {
    self.view.endEditing(true)
    let name = model.name
 }
1 голос
/ 28 апреля 2020

Для этого вам нужно установить тег для текстового поля в ячейке для строки. В методе делегата shouldChageCharacter установите текст в массив данных с соответствующим индексным путем, создайте объект uitableviewcell и установите текст для соответствующей метки. для получения данных вы можете получить данные из массива. В приведенном выше ответ может быть, если вы прокручиваете таблицу, то TableCell будет смешиваться друг с другом.

1 голос
/ 28 апреля 2020

Во-первых, вы name_lbl и гендер_lbl должны быть UITextField, а не UILabel. Вы должны добавить цель для name_lbl и sex_lbl:

cell?.name_lbl.text = model.name
cell?.name_lbl.tag = indexPath.section
cell?.name_lbl.addTarget(self, action: #selector(textFieldNameDidChange(_:)), for: UIControl.Event.editingChanged)
cell?.gender_lbl.text = model.gender 
cell?.name_lbl.tag = indexPath.section
cell?.name_lbl.addTarget(self, action: #selector(textFieldGenderDidChange(_:)), for: UIControl.Event.editingChanged)

и добавить методы textFieldNameDidChange и textFieldGenderDidChange как:

@objc func textFieldGenderDidChange(sender: UITextField) { 
     var model = DataModel[sender.tag]
     model.gender = sender.text
}

Вы должны сделать то же самое для «имени».

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