【问题标题】:UITextfield Change keyboardUITextfield 更改键盘
【发布时间】: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 新手
  • 苹果开发者请检查我的回答。它有效。

标签: ios objective-c uitextfield


【解决方案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;
        }
        

        【讨论】:

        • 我们前进时它可以工作,但是当我按退格键或我剪切一个字符时它不起作用:(
        猜你喜欢
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 2016-09-24
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        相关资源
        最近更新 更多