2016-10-24 19 views
0

テキストフィールドに入力できる文字を制限したいと考えています。例えば、1〜5の数字(1,2、 3、5)、ユーザーが5より大きい数値を入力した場合は、textFieldに何もしないことをお勧めします。Swiftのuitextフィールドに入力できる文字を制限する

私は長さを制限する方法を見てきましたが、上記で説明したように特定の文字を制限するためのものは見つかりませんでした。

私はeditingQtyFieldChangedを使ってみましたが、私がしたいことは全くしていません。

myField.addTarget(self, action: #selector(UserInputViewController.fieldChanged), forControlEvents: UIControlEvents.EditingChanged) 

func fieldChanged(){ 
    let number = Int(myField.text!) 

    if number < 2{ 
     print("Number not allowed") 
    } 
} 

Swiftのuitextフィールドに1〜5の数字だけを限定しますか?

編集:私の解決策は、thisスレッドのおかげです。

​​525
+0

「editingQtyFieldChanged」とは何ですか?このような出来事は記録されていません(少なくともSwift 3の場合)。 – rmaddy

+0

私の悪い、私は間違った方法をタイプしました。 –

答えて

1

textFieldDidEndEditingでは、テキストを解析して数字に変換します。数字があなたの範囲内にない場合は、テキストを以前の値に設定するか、適切なアクションを実行します。

+0

再生いただきありがとうございます。 –

4

私は、文字列の拡張子

extension String { 

    var containsValidCharacter: Bool { 
     let characterSet = CharacterSet(charactersIn: "12345") 
     let range = (self as NSString).rangeOfCharacter(from: characterSet) 
     return range.location != NSNotFound 
    } 
} 

そしてあなたshouldChangeCharactersIn法のようにこれを行います。

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

    return !string.containsValidCharacter 
} 
+0

ありがとうございます。 –

+0

良い解決策は、戻す前に '!'を逆転させる理由がないだけで、 'shouldChangeCharactersInRage'関数はバックスペースもブロックします。これを修正するために、 'return string.containsValidCharacter'の前に' guard string!= "" else {return true} "を挿入しなければなりませんでした。 – RWIL

関連する問題