插入多个字符时关闭文本字段

时间:2013-09-13 10:24:00

标签: ios objective-c uitextfield

我有一个文字字段,我想插入一个电话号码。问题是我使用数字键盘,没有任何输入键,我没有该键,我不知道如何关闭文本字段。

有没有办法检查文本字段中有多少个os字符,并在有X字符时关闭数字键盘?

对不起我的英语并对noob问题感到抱歉,但我刚开始使用ObjC。

谢谢*

对不起伙计们,我忘了告诉你我已经尝试过了:

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

    if (textField.text.length== 9) {
         [textField resignFirstResponder];

    }
    return YES;
}

6 个答案:

答案 0 :(得分:4)

是的,我认为你有两个选择,你可以:

一个。检查委托方法shouldChangeTextInRange中返回的字符数,然后如果达到限制则辞职第一响应者(当您辞职第一响应者时键盘解除,

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ( textView.text.length + (text.length - range.length) == 10) //or whatever value you like
    {
        [textField resignFirstResponder];
    } 
}

或B:

覆盖视图的touchesEnded方法并调用resignFirstResponder,这样当用户触摸textField外部的视图时,键盘就会解除。 - 这就是我在我的应用程序中所做的。

像这样:

只需将此方法添加到viewController,当视图中的触摸结束时,它将自动调用,在此方法中,您只需resignFirstResponder,键盘就会消失。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [textField resignFirstResponder];
}

我认为最好在touchesEnded中执行此操作而不是开始,当您将手指从视图中抬起时,让键盘解除时感觉更好“,而不是最初触摸它时。

答案 1 :(得分:3)

我发现resignFirstResponder不包含最后输入的字符。我必须这样做,

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    DLog(@"Existing: %@, string: %@, range:(%lu, %lu)", textField.text, string, (unsigned long)range.location, (unsigned long)range.length);

        if (textField == field2.textField) {

            if ( textField.text.length + (string.length - range.length) == kMyNumberLength) // e.g. 10
            {
                textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
                [textField resignFirstResponder];
            }

            if (textField.text.length + string.length - range.length > kMyNumberLength) {
                return NO;
            } else {
                return YES;
            }
        }       
    return YES;
}

答案 2 :(得分:1)

每次用户添加号码时,都会通过以下方法通知您的文本字段的代表:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger length = [[textField text] length] - range.length + string.length;
    if (length == ...) ...
}

您可以设置代理,以便观察文本字段的修改内容的长度,并在达到预期长度时关闭字段。

但是,这很有可能让用户受挫:他们会偶尔输入最后一个字符,并且字段将关闭它们,而不是让他们纠正问题。更好的方法是dismiss the pad when users tap away from your text field,它可以让最终用户控制正在发生的事情:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [textField resignFirstResponder];
}

答案 3 :(得分:1)

快速

达到最大字符数时,将新字符添加到textfield中的当前文本中,然后关闭键盘

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let maxLength = 5
    let currentString: NSString = textField.text! as NSString
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString

    if newString.length == maxLength {
        textField.text = textField.text! + string
        textField.resignFirstResponder()
    }

    return newString.length <= maxLength
}

答案 4 :(得分:0)

你可以放一个带有Done的工具栏,点击该按钮就可以隐藏键盘和工具栏。

-(IBAction)doneButtonClicked:(id)sender{
[yourTextField resignFirstResponder];
[toolBar setHidden:YES];
}

或者您可以使用this自定义工具

答案 5 :(得分:-1)

使用此textfield委托方法查找textField.text

的长度
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
   int textLength = [textField.text length] + 1;
   return YES;
}