UITextfield 更改键盘

Posted

技术标签:

【中文标题】UITextfield 更改键盘【英文标题】:UITextfield Change keyboard 【发布时间】:2017-08-02 12:34:59 【问题描述】:

我是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];

我哪里出错了?

【问题讨论】:

在其他情况下工作?尝试使用`textfieldshouldchangecharactersinrange`Delegate 这不是理想的方法。你不应该改变键盘。用户体验不好。 你能帮我获取代码吗?我是 iOS 新手 苹果开发者请检查我的回答。它有效。 【参考方案1】:

试试这个-

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


 [theTextField reloadInputViews];

【讨论】:

【参考方案2】:

使用这个

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];

对于在手机键盘上打字非常快的用户来说,这将是一种糟糕的体验。

【讨论】:

@Appledeveloper 这个方法textEditingChanged 是否使用故事板连接到 UITextView?【参考方案3】:

试试下面的代码。 首先在您的.h 文件中声明UITextFieldDelegate。还将它的委托设置为 self.

您可以使用两种类型设置自我委托:- 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;

【讨论】:

【参考方案4】:

我建议使用多个文本字段,每个文本字段都有自己的键盘类型。

然后,您可以将输入的字符串附加在一起以执行您需要执行的任何操作。这样用户体验更好,操作也更简单。

【讨论】:

【参考方案5】:

请检查我的答案。它工作得很好。我试过了,然后我才在这里发布答案。

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

【讨论】:

我们前进时它可以工作,但是当我按退格键或我剪切一个字符时它不起作用:(

以上是关于UITextfield 更改键盘的主要内容,如果未能解决你的问题,请参考以下文章

第一次更改 UITextField 属性时 isSecureTextEntry 键盘闪烁

UITextField 在我开始输入时保持/保存值,而无需我点击“完成/保存”按钮

UITextField 无法将占位符居中并更改键盘颜色书写

输入四个字符后如何编写UItextfield长度和更改键盘数字格式的条件

检测UITextField的焦点更改

激活 UITextField 时立即更改第一响应者