get des données de UITextField dans UITableViewCell

J'ai créé cette tableview pour get les noms des enfants des users et les stocker dans un tableau appelé dependentsArray :

entrez la description de l'image ici

J'ai cherché par stackoverflow, documentation d'Apple, google, et tutoriels de youtube, et ne peux pas sembler find une solution. Cela semble que cela devrait être simple mais cela provoque tout à fait le mal de tête. Le plus proche que j'ai trouvé à une solution était ce post:

get des données de chaque cellule UITableView Swift

Cependant, je n'obtiens pas la valeur textfield des cellules en les tapant, donc je ne peux pas utiliser didDeselectRowAtIndexPath . Je souhaite get les valeurs de text quand je tape le button "Next".

La tableview développe et contracte son nombre de cellules en fonction d'un entier appelé dependentsCount . J'incrémente et décrémente le dependentsCount comme ceci:

  @IBAction func subtractDependentButtonClick(sender: AnyObject) { dependentsCount -= 1 dependentsTableView.reloadData() fadeTransition(0.3) } @IBAction func addDependentButtonClick(sender: AnyObject) { dependentsCount += 1 dependentsTableView.reloadData() fadeTransition(0.3) } 

Les manières dont ive a essayé d'get la valeur des champs de text sont les suivantes:

  @IBAction func nextButtonPress(sender: AnyObject) { var index = 0 var cell = self.dependentsTableView.cellForRowAtIndexPath(NSIndexPath(index: index)) as! DependentsTableViewCell while index < dependentsCount { self.dependentsArray.append(cell.nameTextField.text!) index += 1 } self.performSegueWithIdentifier("showNextVC", sender: nil) } 

qui a planté l'application ^^

  func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { let cell = dependentsTableView.dequeueReusableCellWithIdentifier("Cell") as! DependentsTableViewCell dependentsArray.append(cell.nameTextField.text!) print("\(dependentsArray)") } 

ce qui ne fait rien ^^

Quelle est la bonne façon d'get le text du champ text de la cellule de table?

Je vous suggère d'essayer quelque chose comme j'ai écrit dans ce sens pour vous (la source est pour le terrain de jeu interactif ).

Brièvement, je suggère d'introduire un model pour vos données:

 class Model { let placeholder: Ssortingng? var text: Ssortingng? init(placeholder: Ssortingng?, text: Ssortingng? = nil) { self.placeholder = placeholder self.text = text } } 

Ensuite, faire une list de templates pour stocker réellement datatables:

 // Sample items. let items = [ TextFieldCell.Model(placeholder: "1"), TextFieldCell.Model(placeholder: "2"), TextFieldCell.Model(placeholder: "3", text: "xxx"), TextFieldCell.Model(placeholder: "4"), TextFieldCell.Model(placeholder: "5"), TextFieldCell.Model(placeholder: "6") ] 

Et connecter les cellules visibles aux templates correspondants via une source de données appropriée.

La cellule peut être comme ceci:

 class TextFieldCell: UITableViewCell, SmartCell, UITextFieldDelegate { var model: Model? { didSet { textField.placeholder = model?.placeholder textField.text = model?.text } } let textField = UITextField() required init?(coder: NSCoder) { super.init(coder: coder) commonInit() } override init(style: UITableViewCellStyle, reuseIdentifier: Ssortingng?) { super.init(style: style, reuseIdentifier: reuseIdentifier) commonInit() } private func commonInit() { contentView.addSubview(textField) textField.delegate = self } override func layoutSubviews() { textField.frame = contentView.bounds.insetBy(dx: 15, dy: 8) } func loadModel(m: Model) { model = m } func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementSsortingng ssortingng: Ssortingng) -> Bool { let text = (textField.text as NSSsortingng?)?.ssortingngByReplacingCharactersInRange(range, withSsortingng: ssortingng) // Update the model. model?.text = text return true } } 

Après cela, vous pouvez lire datatables saisies par l'user à tout moment dans la list des templates.

Jouez avec l'essentiel dans un terrain de jeu iOS interactif!

réponse mise à jour, nouveau didDeselectRowAtIndexPath

 func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { if let textView = self.view.viewWithTag(indexPath.row) as? UITextField { dependentsArray.append(textView.text!) } print("\(dependentsArray)") } 

et mettez cela à l'intérieur de cellForRowAtIndexPath

 cell.nameTextField.tag = indexPath.row