2016-05-05 14 views
1

テーブルビューに複数の行があり、それぞれが1つのUTextFieldを含むカスタムセルクラスのインスタンスです。それぞれのタグを割り当てましたが、各テキストフィールドのテキスト値を取得し、その値を適切な文字列に割り当てる方法を知る必要があります。テーブルビューのセル内のテキストフィールドからテキストを取得

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 
    } 

私はこれを行うことができますが、最適な選択肢のようには見えません。

あなたは単にあなたがあなたと同じことを行うことができますそして、あなたは

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 
} 

として冗長ではない、このコードを使用することができ、この

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

のようなあなたのプレースホルダの配列を作成することができ

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

あなたが何を求めているのか分かりません。 – Alexander

答えて

0

変数、それらを配列に入れて、ちょうど言う

variable[textField.tag] = textField.text! 
関連する問題