UITextfield更改键盘

时间:2017-08-02 12:34:59

标签: ios objective-c uitextfield

我是iOS的新手,

我希望在UITextField

中留下某些字符后更改键盘

例如:我有@"AEBPQ1234M"

的字符串

对于前5个字母我想要字母键盘然后接下来的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];
}

我在哪里弄错了?

5 个答案:

答案 0 :(得分:0)

试试这个 -

@Cacheable

答案 1 :(得分:0)

使用此

selector textEditingChanged:应该监听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];
}

对于在手机键盘中输入速度非常快的用户而言,这将是一次糟糕的体验。

答案 2 :(得分:0)

尝试以下代码。

首先在UITextFieldDelegate文件中声明.h。同时设置自己的委托。

您可以设置两种类型的自我委托: - 1.故事板
2.代码

使用textField.delegate = self;方法中的代码编写viewDidLoad进行设置时。

现在使用.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;
}

答案 3 :(得分:0)

请检查我的答案。它运作完美。我尝试过,然后我才在这里发布答案。

-(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;
}

答案 4 :(得分:0)

我建议使用多个textField,每个textField都有自己的键盘类型。

然后在你的结尾,你可以将输入的字符串附加在一起,做你需要做的事情。这是更好的用户体验,也更容易做到。