2016-05-05 45 views
1

Ich habe mehrere Zeilen in meiner Tabellenansicht, die jeweils eine Instanz meiner benutzerdefinierten Zellenklasse sind, die ein einzelnes UTextField enthält. Ich habe für jedes ein Tag zugewiesen, aber ich muss wissen, wie man jeden Textfeldtextwert abruft und die Werte den passenden Zeichenketten zuweist.Abrufen von Text aus dem Textfeld in der Tabellenansicht Zelle

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("paymentCell", forIndexPath: indexPath) as! PaymentInfoCell 

     cell.selectionStyle = .None 
     cell.textField.delegate = self 

     if indexPath.section == 0 { 
      cell.textField.keyboardType = .NumberPad 

      switch indexPath.row { 
      case 0: 
       cell.textField.placeholder = "Card Number" 
       cell.textField.tag = 0 
      case 1: 
       cell.textField.placeholder = "Security Code" 
       cell.textField.tag = 1 
      case 2: 
       cell.textField.placeholder = "Expiration Month" 
       cell.textField.tag = 2 
      case 3: 
       cell.textField.placeholder = "Expiration Year" 
       cell.textField.tag = 3 
      default: 
       break 
      } 
     } else { 
      switch indexPath.row { 
      case 0: 
       cell.textField.placeholder = "First Name" 
       cell.textField.keyboardType = .Default 
       cell.textField.tag = 4 

       if let firstName = sharedUser.userJSON!["firstName"] { 
        cell.textField.text = firstName as? String 
       } 
      case 1: 
       cell.textField.placeholder = "Last Name" 
       cell.textField.keyboardType = .Default 
       cell.textField.tag = 5 

       if let lastName = sharedUser.userJSON!["lastName"] { 
        cell.textField.text = lastName as? String 
       } 
      case 2: 
       cell.textField.placeholder = "Phone Number" 
       cell.textField.keyboardType = .PhonePad 
       cell.textField.tag = 6 
      case 3: 
       cell.textField.placeholder = "Address" 
       cell.textField.keyboardType = .EmailAddress 
       cell.textField.tag = 7 
      case 4: 
       cell.textField.placeholder = "City" 
       cell.textField.keyboardType = .Default 
       cell.textField.tag = 8 
      case 5: 
       cell.textField.placeholder = "State" 
       cell.textField.keyboardType = .Default 
       cell.textField.tag = 9 
      case 6: 
       cell.textField.placeholder = "Zip Code" 
       cell.textField.keyboardType = .NumberPad 
       cell.textField.tag = 10 
      default: 
       break 
      } 
     } 

     return cell 
    } 

Ich kann dies tun, aber es scheint nicht, wie die beste Option.

func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 

     switch textField.tag { 
     case 0: 
      self.cardNumber = textField.text! 
     case 1: 
      self.securityCode = textField.text! 
     case 2: 
      self.expMonth = textField.text! 
     case 3: 
      self.expYear = textField.text! 
     case 4: 
      self.firstName = textField.text! 
     case 5: 
      self.lastName = textField.text! 
     case 6: 
      self.phoneNumber = textField.text! 
     case 7: 
      self.address = textField.text! 
     case 8: 
      self.city = textField.text! 
     case 9: 
      self.state = textField.text! 
     case 10: 
      self.zipCode = textField.text! 
     default: 
      break 
     } 

     return true 
    } 
+0

Ich bin mir nicht sicher, was Sie fragen. – Alexander

Antwort

0

Sie einfach eine Reihe von Ihren Platzhalter wie diese

let placeholders = ["Card Number", "Security Name", ...] 

Dann können Sie diesen Code verwenden, die

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("paymentCell", forIndexPath: indexPath) as! PaymentInfoCell 

    cell.selectionStyle = .None 
    cell.textField.delegate = self 
    let index = indexPath.row + indexPath.section*6 //calculates the index of the text in the array 
    cell.textField.placeholder = placeholders[index] 
    cell.textField.tag = index 

    if indexPath.section == 0 { 
     cell.textField.keyboardType = .NumberPad 
    } else { 
     if indexPath.row == 0 { 
      if let firstName = sharedUser.userJSON!["firstName"] { 
       cell.textField.text = firstName as? String 
      } 
     } else if indexPath.row == 1 { 
      if let lastName = sharedUser.userJSON!["lastName"] { 
       cell.textField.text = lastName as? String 
      } 
     } 
    } 
    return cell 
} 

Sie tun können, die gleiche nicht redundant ist erstellen können mit Ihrem Variablen, setzen Sie sie in ein Array und sagen Sie einfach

variable[textField.tag] = textField.text! 
Verwandte Themen