2017-08-02 15 views
0

私はiOSに新しいです、UITextFieldの変更キーボード

特定の文字は、例えばのために、UITextField

を去った後、私はキーボードを変更したい:私は、私が欲しい最初の5つの文字のため@"AEBPQ1234M"

の文字列を持っていますアルファベットのキーボードと次の4文字のために私は数字パッドが必要とし、最後の文字には再びアルファベットが必要です。

私が試したコードはここにありますが、キーボードのバックスペースを押すと機能しません。

-(void)textFieldDidChange :(UITextField *)theTextField{ 
    if (theTextField.text.length < 5 || theTextField.text.length >= 9) { 
    [theTextField setKeyboardType:UIKeyboardTypeEmailAddress]; 
} 

if (theTextField.text.length >= 5 && theTextField.text.length < 9) { 
    [theTextField setKeyboardType: UIKeyboardTypeNumberPad]; 
} 

[theTextField reloadInputViews]; 
} 

私は間違いを犯していますか?

+0

他の場合は動作していますか? 'textfieldshouldchangecharactersinrange'を使用しようとします。代理人 –

+1

これは理想的な方法ではありません。キーボードは変更しないでください。良いユーザーエクスペリエンスではありません。 –

+0

あなたはコードを取得するのを助けてもらえますか?iOSの新機能 –

答えて

0

this-

-(void)textFieldDidChange :(UITextField *)theTextField{ 
    if (panNumber.length <= 5 || panNumber.length > 9) { 
     [theTextField setKeyboardType:UIKeyboardTypeEmailAddress]; 
    } 
    else { 
     [theTextField setKeyboardType: UIKeyboardTypeNumberPad]; 
    } 


[theTextField reloadInputViews]; 
} 
0

使用このselectortextEditingChanged:UIControlEventEditingChangedイベント

//これは悪いだろうviewDidLoad

[self.textField addTarget:self action:@selector(textEditingChanged:) forControlEvents:UIControlEventEditingChanged]; 

-(void)textEditingChanged:(UITextField*) sender{ 
    if (sender.text.length > 5 && sender.text.length < 9) { 
     [self.textField setKeyboardType: UIKeyboardTypeNumberPad]; 
    } 

    if (sender.text.length < 5 || sender.text.length == 10) { 
     [self.textField setKeyboardType:UIKeyboardTypeEmailAddress]; 
    } 

    [self.textField reloadInputViews]; 
} 

に以下を追加するために耳を傾けなければならない

をお試しください経験電話キーボードで非常に速く入力するユーザーのための喜びです。

+0

私のrequirmentとして働いていない –

+0

どのようにあなたのために働くのですか? –

+0

@Appledeveloperは、このメソッド 'textEditingChanged'をストーリーボードを使用してUITextViewに接続していますか? –

0

下記のコードを試してください。

最初に.hファイルにUITextFieldDelegateと宣言します。また、それは自己と一緒にデリゲートを設定します。

あなたは2種類の自己デリゲートを設定することができます -
1.ストーリーボード
2.コードviewDidLoad方法でコード書き込みtextField.delegate = self;で設定


は今.mファイルのコードの下に

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    if (textField.text.length < 4 || textField.text.length > 7) { 

     [textField setKeyboardType: UIKeyboardTypeEmailAddress]; 

    } else { 

     [textField setKeyboardType: UIKeyboardTypeNumberPad]; 
    } 

    [textField reloadInputViews]; 
    return YES; 
} 
0

を使用し、私のanswer.Itはperfectly.Iが唯一の私はここに答えを投稿し、それを試してみました作品をご確認ください。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

    if(string.length == 0 && range.location == 9) 
     range.location = range.location - 2; 

    if(string.length == 0 && range.location == 8) 
     range.location = range.location - 1; 

    if(string.length == 0 && range.location > 3) 
     range.location = range.location - 2; 

    if(range.location <= 3){ 
     textField.keyboardType = UIKeyboardTypeAlphabet; 
     [textField reloadInputViews]; 
     return YES; 
    } 
    else if(range.location > 3 && range.location <= 7){ 
     textField.keyboardType = UIKeyboardTypeNumberPad; 
     [textField reloadInputViews]; 
     return YES; 
    } 
    else if(range.location > 7){ 
     textField.keyboardType = UIKeyboardTypeAlphabet; 
     [textField reloadInputViews]; 
     return YES; 
    } 
    else{ 
     return NO; 
    } 
    return YES; 
} 
+0

私たちが前進するときに働いていますが、私がバックスペースを押すか、1文字をカットすると動作しません。 –

0

それぞれ独自のキーボードタイプで複数のtextFieldを使用することをおすすめします。

最後に、入力した文字列を追加して、必要な処理をします。これははるかに優れたユーザーエクスペリエンスであり、やりやすくなります。

関連する問題