2017-02-18 5 views
0

У меня есть поле, которое берет код подтверждения, отправленный через SMS. Код, отправленный всем пользователям, представляет собой четырехзначный цифровой код. Я хочу, чтобы пользователь вводил код, и после ввода 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) вы можете использовать else, если text.character.count == 4. –

ответ

0

я пишу демо вы можете найти на сайте:

В ViewController:

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") 
        } 
       } 
      } 
     } 
    } 
Смежные вопросы