2017-02-18 33 views
0

我有一個字段,需要通過SMS發送驗證碼。發送給所有用戶的代碼是4位數字代碼。我希望用戶輸入代碼,並在輸入第4位數字後,自動檢查代碼(無需點擊按鈕),如果匹配期望值,則打印正確的控制檯。如果不匹配,則打印錯誤控制檯(用於打印目的的控制檯)。Swift:檢查用戶輸入計數以繼續

假設我的代碼(固定用於測試的目的)是1234,下面是我的嘗試預期不工作:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

     if let text = textField.text { 

      if let floatingLabelTextField = textField as? SkyFloatingLabelTextField { 
       if(text.characters.count > 4) { 
        floatingLabelTextField.errorMessage = "code is invalid" 
       } 
       else { 
        // The error message will only disappear when we reset it to nil or empty string 
        floatingLabelTextField.errorMessage = "" 
        let smsInputCode = Int(self.verificationTextField.text!) 
        if(smsInputCode == self.smsSampleCode) 
        { 
         print("Correct Code") 
        }else{ 
         print("Incorrect Code") 
        } 
       } 
      } 
     } 
     return true 
    } 

上面的代碼打印出「不正確」的4倍,我打字只有當我點擊鍵盤上的標籤欄(不是自動檢測)後,數字纔會顯示正確的代碼。

感謝您的幫助。

+0

@Khalid我猜你在文本字段中它檢查輸入1 1 == 1234打印不正確,然後相同2 = 1234打印不正確,3 = 1234再次不正確,然後4 = 1234再次不正確,然後退出。然後最後讀取1234 = 1234,當您單擊標籤欄時給你正確。 –

+0

@sasquatch如果這樣做了,那麼這對正確和不正確的陳述有什麼幫助? – ksjg

+0

@Ksjg而不是(else)如果text.character.count == 4,你可以使用else。 –

回答

0

我寫了一個演示中,你可以參考一下:

在視圖控制器:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var textField: UITextField! 

    @IBOutlet weak var label: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

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


    } 

    func textFieldAction() { 

     if (textField.text?.characters.count)! > 4 { 

      let lengh = textField.text?.characters.count 

      let str:NSString = textField.text! as NSString 

      textField.text = str.substring(to: lengh! - 1) 
     } 

     if textField.text == "1234" { 
      label.text = "valid" 
     }else { 
      label.text = "invalid" 
     } 

    } 

} 

結果:

enter image description here

0

嘗試這種情況:

步驟 - 1個
UITextField動作

yourtextfieldname.addTarget(self, action: #selector(self.textFieldEditingChange(_:)), for: UIControlEvents.editingChanged) 

步驟 - 2
UITextField方法

func textFieldEditingChange(_ textField:UITextField) { 
     //self.columnValue[textField.tag] = textField.text! 
     if let text = textField.text { 
      if let floatingLabelTextField = textField as? SkyFloatingLabelTextField { 
       if(text.characters.count > 4) { 
        floatingLabelTextField.errorMessage = "code is invalid" 
      } 
      else { 
       // The error message will only disappear when we reset it to nil or empty string 
       floatingLabelTextField.errorMessage = "" 
       let smsInputCode = Int(text) 
        if(smsInputCode == self.smsSampleCode) 
        { 
         print("Correct Code") 
        }else{ 
         print("Incorrect Code") 
        } 
       } 
      } 
     } 
    }