it-swarm.com.ru

Отображение ошибки проверки на iOS UITextField аналогично Android TextView.setError ()

Есть ли способ показать ошибку проверки UITextField, которая похожа на TextView.setError() Android в swift?

13
ihsan

UITextField не поставляется с функцией проверки из коробки. Вы можете найти некоторые API с открытым исходным кодом, чтобы помочь вам в этом. Один из возможных вариантов - заглянуть в SSValidationTextField api. 

Код будет 

var phoneValidationTextField = SSValidationTextField(frame: CGRectMake(200, 200, 150, 50))
phoneValidationTextField.validityFunction = self.isValidPhone
phoneValidationTextField.delaytime = 0.5
phoneValidationTextField.errorText = "Incorrect Format"
phoneValidationTextField.successText = "Valid Format"
phoneValidationTextField.borderStyle = UITextBorderStyle.RoundedRect
self.addSubview(phoneValidationTextField)
2
S Shahid

Просто делюсь тем, что часто использую. Это разработано, чтобы соответствовать "только нижней границе" TextFields. - Потому что они мне нравятся;) - но их легко можно настроить под любой стиль

Пример только с нижней границей

Расширение для настройки текстового поля, чтобы показывать только одну нижнюю строку:

extension UITextField {
    func setBottomBorderOnlyWith(color: CGColor) {
        self.borderStyle = .none            
        self.layer.masksToBounds = false
        self.layer.shadowColor = color
        self.layer.shadowOffset = CGSize(width: 0.0, height: 1.0)
        self.layer.shadowOpacity = 1.0
        self.layer.shadowRadius = 0.0
    }
}

Затем еще одно расширение, чтобы заставить его мигать красным и дрожать, показывая, что есть ошибка проверки:

extension UITextField {
    func isError(baseColor: CGColor, numberOfShakes shakes: Float, revert: Bool) {
        let animation: CABasicAnimation = CABasicAnimation(keyPath: "shadowColor")
        animation.fromValue = baseColor
        animation.toValue = UIColor.red.cgColor
        animation.duration = 0.4
        if revert { animation.autoreverses = true } else { animation.autoreverses = false }
        self.layer.add(animation, forKey: "")

        let shake: CABasicAnimation = CABasicAnimation(keyPath: "position")
        shake.duration = 0.07
        shake.repeatCount = shakes
        if revert { shake.autoreverses = true  } else { shake.autoreverses = false }
        shake.fromValue = NSValue(cgPoint: CGPoint(x: self.center.x - 10, y: self.center.y))
        shake.toValue = NSValue(cgPoint: CGPoint(x: self.center.x + 10, y: self.center.y))
        self.layer.add(shake, forKey: "position")
    }
}

Как пользоваться:

Настройте UITextField для отображения только нижней границы в viewDidLoad:

override func viewDidLoad() {
    myTextField.setBottomBorderOnlyWith(color: UIColor.gray.cgColor)
}

Затем, когда какая-то кнопка нажата, и вы не проверяете поле:

@IBAction func someButtonIsClicked(_ sender: Any) {
    if let someValue = myTextField, !name.isEmpty {
        // Good To Go!
    } else {
        myTextField.isError(baseColor: UIColor.gray.cgColor, numberOfShakes: 3, revert: true)
    }
}
11
SpanTag

Вы можете проверить текст, установив делегат UITextField в свой контроллер представления, а затем сделать что-то вроде этого:

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

   // Your method to validate the input
   // self.validateInputText()

   return true
}

И вы даже можете изменить цвет границы, если хотите:

textField.layer.borderColor = UIColor.redColor().CGColor

Я надеюсь, что это поможет вам.

7
Victor Sigler

Нет нужно

  1. подкласс UITextField 

  2. Создайте функцию, которая setError, давайте назовем ее func setError()

  3. В этой функции вы можете создать UIImageView, который содержит UIImage (изображение ошибки). Установите его в rightView UITextField, используя UITextField.rightView 

  4. Не забудьте установить UITextField.rightViewMode, чтобы всегда показывать

Правка:

В качестве альтернативы, если вы не предпочитаете создавать подклассы. Вы можете напрямую установить rightVIew UITextField в UIImageView, который содержит изображение ошибки

3
JayVDiyk

Нет, встроенного метода для этого не существует. Для этого вам нужно настроить UITextField.

Для этого есть библиотека с открытым исходным кодом. Вы можете найти его здесь: US2FormValidator

0
Midhun MP