2017-02-23 3 views
0

Ich habe benutzerdefinierte Zellen, die jeweils ein Textfeld in ihnen haben. Wenn ich den Text in ihnen ändere, möchte ich die aktuelle Zeile erhalten und dann mein Array korrekt aktualisieren. Bisher glaube ich nicht, dass ich überhaupt in der Lage war, den didFinishEditing-Lauf überhaupt laufen zu lassen. Ich habe dort einen einfachen Druckbefehl eingegeben, und als ich die textFields änderte, wurde nichts ausgedruckt. Ich bin mir nicht sicher, wo ich die Funktion platzieren soll, in der Klasse der Zelle oder der Hauptklasse. In der Hauptklasse läuft es nicht, und in der Zellklasse kann es mir den Index path.row nicht geben.Wie benutze ich didFinishEditing (textField) mit benutzerdefinierten Zellen?

Hier ist, was ich versucht habe:

func textFieldDidEndEditing(_ itemTitle: UITextField) { 
    let pointInTable = itemTitle.convert(itemTitle.bounds.origin, to: self.tableView) 

    let textFieldIndexPath = self.tableView.indexPathForRow(at: pointInTable) 


    items.insert(itemTitle.text!, at: textFieldIndexPath) 

    //tableView.reloadData()(This isn't really that important) 
} 

Und auch dies:

func textFieldDidEndEditing(_ itemTitle: UITextField) { 

    items.insert(itemTitle.text!, at: indexPath.row) 

    //tableView.reloadData()(This isn't really that important) 

}

Hier ist meine Zelle Klasse:

class ItemTableViewCell: UITableViewCell { 

    @IBOutlet weak var itemTitle: UITextField! 
    @IBOutlet weak var date: UILabel! 


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     itemTitle.resignFirstResponder() 
    }//(Not relevant) 

}

In meiner Hauptklasse habe ich folgend:

class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 

Und einen Screenshot, wie meine Ansicht ist gelegt:

Screenshot link

Ich nahm so individuelle Zellen bis ich bin anfangen zu lernen. Ich habe .default und .subtitle Zellen sowie Tabellenansichten zuvor verwendet.

Vielen Dank für Antworten!

+0

Ich glaube, Sie vergessen textfield.delegate = Selbst – Ram

+0

Die Bearbeitung, sobald die Tastatur „done“ genannt wird, gedrückt wird (hat Ende hinzuzufügen und der Delegierte muss ebenfalls festgelegt werden). Sie müssen ein Ziel für die Wertänderung hinzufügen. Sie können es aus dem Interface Builder ziehen und eine Aktion auswählen. (oder es könnte sein "Bearbeitung geändert") –

Antwort

0

Sie erhalten nichts ausgedruckt, weil das UITextFieldDelegate in Ihrer TableViewCell sein muss, dann können Sie mit einem Delegaten die Zelle und den Text, den Sie im textField verwenden, an den viewController übergeben und dort auf Ihre zugreifen tableView und Sie indexPath.

so etwas wie dieses Versuchen:

Sie hier Ihre Delegaten und das Textfeld ein Delegierter auf Ihre customCell setzen

protocol ItemTableViewCellDelegate: NSObjectProtocol { 
    func textFieldDidEndEditing(text: String, cell: ItemTableViewCell) 
} 


class ItemTableViewCell: UITableViewCell, UITextFieldDelegate { 

    @IBOutlet weak var itemTitle: UITextField! 
    @IBOutlet weak var date: UILabel! 

    var delegate: ItemTableViewCellDelegate? 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     itemTitle.resignFirstResponder() 
    } 

    override func awakeFromNib() { 
     itemTitle.delegate = self 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     if let text = textField.text { 
      delegate?.textFieldDidEndEditing(text: text, cell: self) 
     } 
    } 
} 

Und sie Ihre Klasse reicht von Ihnen individuelle delegieren. In der Delegatfunktion können Sie die indexPath mit indexPath Zugang (für: cell)

class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, ItemTableViewCellDelegate { 

    func textFieldDidEndEditing(text: String, cell: ItemTableViewCell) { 
     if let indexPath = tableView.indexPath(for: cell) { 
      items.insert(text, at: textFieldIndexPath) 
     } 
    } 
} 
+0

Ich bin mir nicht sicher, was ich getan habe, um das zu lösen, aber es war etwas in dieser Richtung, danke! – Tuomax

+0

Hallo Toumax, wenn Sie eine Hilfe benötigen, um zu verstehen, was passiert ist, lassen Sie es mich wissen. –

Verwandte Themen