2017-07-12 28 views
0

私はオンラインで検索し、TextFieldsの制限に関する多くの例を見つけましたが、複数の要因を制限することはできません。私が作業しているコードは入力を邪魔して、なぜその理由が分かりません。TextField入力を大文字に制限する文字、数字、および文字数制限は6ですか?

HERESに私のコード: が(注:私はすでにデリゲートを設定されています)

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    guard let text = LPinput.text else { return true } 
    let newLength = text.characters.count + string.characters.count - range.length 
    LPinput.text = (textField.text! as NSString).replacingCharacters(in: range, with: string.uppercased()) 
    return newLength <= limitLength 
} 

ここで私は、TextFieldに入力するものです。ここに

食品

とは何ですかTextFieldに表示されます:

FfOoOoD

助けてください!

+0

LPinputは何を?に役立ちますかなぜあなたはあなたの機能でブールを返すのですか? –

+2

テキストフィールドの 'text'プロパティを更新すると' shouldChangeCharactersIn'から 'true'を返さないでください。 – rmaddy

+1

@ElTomato戻り値の型が 'Bool'のデリゲートメソッドから何を返すでしょうか? – rmaddy

答えて

1

@rmaddyが言っているように、問題はUITextField.textプロパティを変更して、それがtrueを返すということです。これはあなたの質問に基づいて重複した動作を引き起こします。したがって、私はそれを変更してからtextLengthをチェックし、重複文字を追加することを避けるために、常にfalseを返し、このコード

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    guard let text = LPinput.text else { return true } 
    let newLength = text.characters.count + string.characters.count - range.length 
    if(newLength <= limitLength) 
    { 
    LPinput.text = (textField.text! as NSString).replacingCharacters(in: range, with: string.uppercased()) 
    } 
    return false 
} 

希望してみてください、これはあなた

+0

ありがとう、私は今これを理解し始めている!とても有難い! –

関連する問題