今回の記事は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とは何かというと簡単にいうと「処理を行う際に連結して処理が自動的に行われる仕組みのこと」です。下記に解説記事を用意しているので気になる方は参考にしてみて下さい。
今回の記事ではわかっていなくとも本質の部分は問題なく理解できます。
では先ほど追加した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関連の記事を記載しています。是非そちらも興味があれば是非参考にしてみて下さい。
コメント