スポンサーリンク

【Swift】textfieldで入力チェックを行う方法ご紹介。

Swift
スポンサーリンク

今回の記事はSwiftのtextfieldで入力チェックを行う方法に関しての記事です。初心者にも分かりやすいように簡単に記載しておきますので是非参考にしてみて下さい。

スポンサーリンク

入力チャックとは?

Swiftのtextfieldとは下記図のような文字を入力できる欄のことです。この欄にたとえば半角全角の縛りがある場合にチェックすることを入力チェックといいます。

実際にどのように行なっていくかを確認していきましょう。また、textfieldの使い方を簡単に解説している記事も記載しているので参考にして見て下さい。

【Swift】textfieldの使い方ご紹介。〜 初心者向け 〜

Swiftでtextfieldに入力チェック

textfieldの入力チェックには2通りあります。一つが「入力後の改行やreturnでキーボードを閉じる際にdelegateで入力チェック」です。もう一つが「ボタンなどの処理でtextfieldの入力チェック」の2種類があります。どちらでも行なっていることは変わりません。順番に見ていきましょう。

入力後の改行やreturnでキーボードを閉じる際にdelegateで入力チェック

こちらの場合はdelegateを設定する必要があります。

textfieldにdelegateを設定

まずは下記のようにdelegateを設定する必要があるため記述を変更します。まず、classに下記のような記述で「UITextFieldDelegate」を追加します。

class ViewController: UIViewController,UITextFieldDelegate {
    
    //outlet接続したtextfield
    @IBOutlet weak var testtext: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        testtext.delegate = self
    }
}

これでtextfieldのdelegateが追加されました。ちなみにdelagateとは何かというと簡単にいうと「処理を行う際に連結して処理が自動的に行われる仕組みのこと」です。下記に解説記事を用意しているので気になる方は参考にしてみて下さい。

【Swift】delegateの使い方ご紹介。

今回の記事ではわかっていなくとも本質の部分は問題なく理解できます。

では先ほど追加したdelageteを使用して後続処理で文字数を制限していきます。

リターンや改行の後に文字数制限の入力チェック

class ViewController: UIViewController,UITextFieldDelegate {
    
    //outlet接続したtextfield
    @IBOutlet weak var testtext: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        testtext.delegate = self
    }

    //テキストフィールドでリターンが押されたときに通知され起動するメソッド
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        if let text = textField.text {
            if textField.markedTextRange == nil && text.count > 8 {
                textField.text = text.prefix(8).description
            }
        }
        return true
    }
}

次に英数字のみなどの入力チェックを行う場合に関して記述していきます。

リターンや改行の後に英数字のみなどの入力チェック

先ほどのコードに下記を追加すれば良いです。

    //半角英数字制限
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if string.count > 0 {
            var allowedCharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz1234567890_") // 入力可能な文字
            allowedCharacters.insert(charactersIn: " -")
            let unwantedStr = string.trimmingCharacters(in: allowedCharacters) // 入力可能な文字を全て取り去った文字列に文字があれば、テキスト変更できないFalseを返す。
            if unwantedStr.count == 0 {
                print("正常")
                return true
            } else {
                print("異常")             
                return false
            }
        } else {
            print("正常")
            return true
        }
    }

下記の部分が制限する文字です。この文字のみが許可されます。追加があればここに追加して下さい。

var allowedCharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz1234567890_") // 入力可能な文字

ボタンなどの処理でtextfieldの入力チェック

ではもう一つのパターンですがやっていることは同じです。先ほどまでdelegateで行なっていたことをボタンアクションなどの際に実行すれば入力チェックの完成です。

@IBAction func Login(_ sender: Any) {
    //8文字以上
    if testtextfield.text.length > 8 {
        print("8文字以上")
    }
    //
    if string.count > 0 {
        var allowedCharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz1234567890_") // 入力可能な文字
        allowedCharacters.insert(charactersIn: " -")
        let unwantedStr = string.trimmingCharacters(in: allowedCharacters) // 入力可能な文字を全て取り去った文字列に文字があれば、テキスト変更できないFalseを返す。
        if unwantedStr.count == 0 {
            print("正常")
            return true
        } else {
            print("異常")            
            return false
        }
    } else {
        print("正常")
        return true
    }
}

上記のボタンアクションの中に好きな入力チェックを入れればOKです。

では今回の記事は以上です。他にも多数のSwift関連の記事を記載しています。是非そちらも興味があれば是非参考にしてみて下さい。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Swift
スポンサーリンク
スポンサーリンク
ともぶろぐ

コメント

タイトルとURLをコピーしました