2016-04-06 16 views
0

Ich bin ein UITableViewController implementieren, die 3 Abschnitte unter den ersten beiden enthält 2 und 1 Textfeld haben. Ich habe Probleme beim Zugriff auf die Texteingabe im Textfeld. Ich habe keine Ahnung, wie man dieses Problem in iOS schnell beheben kann, bitte helfen Sie.Zugriff auf Text von UITextField in einem UITableViewCell

In Tabelle View-Controller

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let gender = Gender(rawValue: indexPath.row) 

     switch indexPath.section { 
     case 0: 
      guard let nameCell = tableView.dequeueReusableCellWithIdentifier("addNameCellID") as? ChildFormViewCell else { 
       return UITableViewCell() 
      } 
      nameCell.firstNameField.text = "" // just in case cells are re-used, this clears the old value 
      nameCell.firstNameField.tag = indexPath.row 
      return nameCell 

     case 1: 
      self.tableView.rowHeight = 50 
      guard let dateCell = tableView.dequeueReusableCellWithIdentifier("addDateCellID") as? ChildFormViewCell else { 
       return UITableViewCell() 
      } 
      return dateCell 

     case 2: 
      guard let genderCell = tableView.dequeueReusableCellWithIdentifier("addGenderCellID") as? ChildFormViewCell else { 
       return UITableViewCell() 
      } 
      genderCell.genderLabel.text = gender?.nameString() 
      return genderCell 

     default: 
     return UITableViewCell() 
     } 
    } 

extension AddChildFormTVC: ChildFormViewCellDelegate { 
    func getFirstName(text: String?) { 
     print(text) 
    } 
    func getLastName(text: String?) { 
     print(text) 
    } 
    func getDateOfBirth(text: String?) { 
     print(text) 
    } 
    func getGender(text: String?) { 
     print(text) 
    } 

} 

class ChildFormViewCell: UITableViewCell { 

    @IBOutlet weak var firstNameField: UITextField! 
    @IBOutlet var lastNameField: UITextField! 
    @IBOutlet var dateField: UITextField! 
    @IBOutlet var genderLabel: UILabel! 
    var delegate: ChildFormViewCellDelegate! 


} 

extension ChildFormViewCell: UITextFieldDelegate { 
    func textFieldDidEndEditing(textField: UITextField) { 
     switch(textField) { 
     case self.firstNameField: 
      self.delegate.getFirstName(firstNameField.text) 

     case self.lastNameField: 
      self.delegate.getLastName(lastNameField.text) 

     case self.dateField: 
      self.delegate.getDateOfBirth(dateField.text) 

     case self.genderLabel: 
      self.delegate.getGender(genderLabel.text) 

     default: 
      return 
     } 
    } 
} 

protocol ChildFormViewCellDelegate { 
    func getFirstName(text: String?) 
    func getLastName(text: String?) 
    func getDateOfBirth(text: String?) 
    func getGender(text: String?) 
} 
+0

Wen sagen Sie "Zugriff" auf den Text, meinst du bei der Zellgenerierung, oder meinst du außerhalb der UITableView Delegate-Methoden? d. h. auf ein bestimmtes textField in der UITableView verweisen, um dessen Text zu erhalten? –

+0

Nein Ich möchte Text, wenn der Benutzer Text in das Textfeld eingibt. –

+0

Meinst du, wenn der Benutzer Text eingibt, während er eine Taste drückt, erhalten Sie einen Rückruf, der eine Nachricht bei jedem Tastendruck sendet, z. das Eingeben von "Hallo" würde zu 5 Rückrufen führen, von denen jeder "h", "he", "hel", "hell", "hallo" oder kurz nachdem der Benutzer fertig ist, d.h. ein Rückruf mit dem vollen "Hallo"? –

Antwort

0

Dann versuchen:

//This will call back after focus is lost from the input  
self.textField.addTarget(self, action: #selector(updateFirstName), forControlEvents: .EditingDidEnd) 
    //This will call back with every change, i.e. each letter 
self.textField.addTarget(self, action: #selector(updateFirstName), forControlEvents: .EditingChanged) 

Auch dort, wo self als Ziel hinzugefügt wird, bedeutet self die UITableViewController. Soweit ich weiß, kann ein Objekt nicht sein eigener Delegierter sein. Es wäre sinnlos, wenn das möglich wäre.

Verwandte Themen