Je veux créer une vue tabulaire avec des champs de texte dans chaque cellule,
J'ai une classe personnalisée dans un fichier Swift:
import UIKit
public class TextInputTableViewCell: UITableViewCell{
@IBOutlet weak var textField: UITextField!
public func configure(#text: String?, placeholder: String) {
textField.text = text
textField.placeholder = placeholder
textField.accessibilityValue = text
textField.accessibilityLabel = placeholder
}
}
Ensuite, dans mon ViewController, j'ai
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("TextInputCell") as! TextInputTableViewCell
cell.configure(text: "", placeholder: "Enter some text!")
text = cell.textField.text
return cell
}
Cela fonctionne bien:
Mais lorsque l'utilisateur saisit du texte dans le champ de texte et appuie sur le bouton, je veux stocker les chaînes de chaque champ de texte dans un tableau. J'ai essayé avec
text = cell.textField.text
println(text)
Mais il n'imprime rien comme s'il était vide
Comment puis-je le faire fonctionner?
Dans votre contrôleur de vue, devenez un UITextFieldDelegate
Afficher le contrôleur
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {
var allCellsText = [String]()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell
cell.theField.delegate = self // theField is your IBOutlet UITextfield in your custom cell
cell.theField.text = "Test"
return cell
}
func textFieldDidEndEditing(textField: UITextField) {
allCellsText.append(textField.text)
println(allCellsText)
}
}
Cela ajoutera toujours les données de textField au tableau allCellsText.
créer une variable
var arrayTextField = [UITextField]()
après cela dans votre func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{}
ajoutez
self.arrayTextField.append(textfield)
avant de retourner la cellule, après cela pour afficher les valeurs en utilisant
for textvalue in arrayTextField{
println(textvalue.text)
}
cette méthode consiste à initier la cellule, vous n'avez pas de modèle pour enregistrer ces données, donc
text = cell.textfield.text
c'est rien! vous pouvez initier var textString
dans viewcontroller, un UITextFieldDelegate hérité
optional func textFieldDidEndEditing(_ textField: UITextField)
{
textString = _textField.text
}
optional func textFieldShouldReturn(_ textField: UITextField) -> Bool{
return true
}
et cell.textField.text = textString