텍스트 필드에서 유효성 검사에 걸리면 문자 색상을 빨간색으로 밑줄을 그립니다.

안녕하세요

이런 느낌의 ↓ 텍스트 필드를 만들어 보았습니다.



코드


UITextField 를 계승한 클래스에 isValid 를 갖게 하는 형태로 해 보았습니다.
import UIKit

class FormTextField: UITextField {
    private var validatorLayer: CALayer!

    var isValid = true {
        didSet {
            validatorLayer.isHidden = isValid
            validatorLayer.frame = CGRect(x: 0, y: self.frame.height - 2, width: self.frame.width, height: 2)
            textColor = isValid ? .black : .red

        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        didInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        didInit()
    }

    private func didInit() {
        // バリデーション用の下線
        validatorLayer = CALayer()
        validatorLayer.backgroundColor = UIColor.red.cgColor
        validatorLayer.isHidden = true
        layer.addSublayer(validatorLayer)
    }

}

Storyboard에서 텍스트 필드를 설정하는 경우 클래스 이름을 FormTextField로 두는 것을 잊지 마십시오!

이것으로
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: FormTextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        textField.addTarget(self, action: #selector(handleTextField(_:)), for: .editingChanged)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func handleTextField(_ textField: FormTextField) {
        // バリデーション例として20文字以内であるかチェック
        guard let text = textField.text else { return }
        textField.isValid = text.characters.count < 20
    }

}

OK입니다!

샘플



샘플은 여기입니다!
htps : // 기주 b. 코 m / 케이 세이 1092 / 푸 rm 푸에 ldP 등 c 치세

좋은 웹페이지 즐겨찾기