2015-07-31 7 views
10

Ich möchte eine Tabellenansicht mit Textfeldern in jeder Zelle machen,Wie macht man UITableview mit Textfield in swift?

Ich habe eine benutzerdefinierte Klasse in einer schnellen Datei:

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 
    } 
} 

Da ist in meinem Viewcontroller Ich habe

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 

} 

That funktioniert gut:

enter image description here

Aber wenn der Benutzer Text in das Textfeld eingibt und die Schaltfläche Ich möchte die Strings jedes Textfelds in einem Array speichern möchten. Ich habe versucht, mit

text = cell.textField.text 
println(text) 

Aber es druckt nichts, wie wenn es leer war

Wie kann ich es funktioniert?

+0

bereits beantwortet in http://stackoverflow.com/questions/7344247/fetching-values-from-textfield-in-a-custom-cell-iphone –

Antwort

9

Ihrer Ansicht Controller eine UITextFieldDelegate werden

View Controller

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) 
} 
} 

Dies wird immer anhängen die Daten aus dem tex tField zum allCellsText-Array.

+0

Das funktioniert! Aber wie kann ich textfield.text an das Array anhängen, wenn die Taste gedrückt wird? Ich habe versucht zu setzen: 'allCellsText.append (textField.text) println (allCellsText)' innerhalb der buttonPressed-Funktion, aber es identifiziert nicht das Textfeld – Zablah

+0

Das kann nicht mit dem textField-Delegat, obwohl Sie einige Arten von tun können Bedienen Sie Ihre Daten mit der Schaltfläche oder kopieren Sie die Daten in ein anderes Array. –

+0

@thefredelement In 'class ViewController' habe ich eine Instanz von TextInputTableViewCell erstellt und in ViewDidAppear versuche ich, die Daten von UserDefaults zu' var textField' von TextInputTableViewCell zuzuordnen, aber die Zuweisung schlägt fehl, unerwartet gefunden Null beim Auspacken eines optionalen Wertes – bibscy

0

diese Methode init der Zelle, haben u nicht diese Daten modellieren, zu speichern, so

text = cell.textfield.text 

ist nichts! können Sie var textString in Viewcontroller init, ein inherit UITextFieldDelegate

optional func textFieldDidEndEditing(_ textField: UITextField) 
{ 
    textString = _textField.text 
} 
optional func textFieldShouldReturn(_ textField: UITextField) -> Bool{ 
    return true 
} 

und cell.textField.text = textString

1

erstellen Sie eine Variable

var arrayTextField = [UITextField]() 

danach in Ihrem func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{} hinzufügen

self.arrayTextField.append(textfield) 

vor Zelle zurückkehrt, nachdem diese die Werte anzuzeigen

Verwandte Themen