2016-05-12 60 views
1

我正在嘗試使用以下代碼創建信用卡類型文本,但無法做到這一點,有沒有辦法做到這一點?如何在swift中使信用卡(xxxx-xxxx-xxxx)鍵入文本

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    let formatter = NSNumberFormatter() 

    formatter.groupingSize = 4 
    formatter.groupingSeparator = "-" 
    formatter.usesGroupingSeparator = true 

    print("txtCardNumber \(txtCardNumber.text)") 
} 
+1

可能重複[格式化UITextField的信用卡輸入像(xxxx xxxx xxxx xxxx)](http://stackoverflow.com/questions/12083605/formatting-a-uitextfield-for-credit-card-input- like-xxxx-xxxx-xxxx-xxxx) –

+1

它不是重複的,因爲這個答案是用一些冗長的邏輯在Objective-C語言中的。我試圖在標準邏輯中快速執行 – sss

+0

這個問題也有Swift答案。谷歌你的問題標題帶來更好的結果。你可能不得不重寫它們,但是那裏看起來真的很合理。 –

回答

2

這裏是快速swift 3版本的答案。這個邏輯實現簡單的16位數字信用卡格式與空格。

第1步:創建信用卡文本框的動作

 self.txtFieldCreditCardNumber.addTarget(self, action: #selector(didChangeText(textField:)), for: .editingChanged) 

第2步:致電文本字段的這種選擇方法,將做格式化

func didChangeText(textField:UITextField) 
{ 
    textField.text = modifyCreditCardString(creditCardString: textField.text!) 
} 

第3步的方法:實施方法「modifyCreditCardString」

func modifyCreditCardString(creditCardString : String) -> String 
{ 
    let trimmedString = creditCardString.components(separatedBy: .whitespaces).joined() 

    let arrOfCharacters = Array(trimmedString.characters) 

    var modifiedCreditCardString = "" 

    if(arrOfCharacters.count > 0) 
    { 
     for i in 0...arrOfCharacters.count-1 
     { 
      modifiedCreditCardString.append(arrOfCharacters[i]) 

      if((i+1) % 4 == 0 && i+1 != arrOfCharacters.count) 
      { 

       modifiedCreditCardString.append(" ") 
      } 
     } 
    } 
    return modifiedCreditCardString 
} 

第4步:實現UIT的委託extField

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
{ 
    let newLength = textField.text!.characters.count + string.characters.count - range.length 

    if(textField == txtFieldCreditCardNumber) 
    { 
     return newLength <= 19 
    } 
    return true 
} 

就是這樣。謝謝

相關問題