Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Close text field when a number of characters is inserted

I have a text field where I want to insert a phone number. The problem is that I use number pad and there is not any enter key and I without that key I don't know how to close the text field.

Is there any way of checking how many number os characters there are in a text field and close the number pad when there are X chars?

Sorry for my english and sorry for the noob question but I am just starting with ObjC.

Thanks *

Sorry guys, I forgot to tell you that I already have tried this:

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

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

    }
    return YES;
}
like image 623
Dyna Avatar asked Sep 13 '13 10:09

Dyna


People also ask

How many characters are allowed in the text field?

Text fields hold up to 255 characters in a single line.

What is a text field on Iphone?

A text field is a rectangular area in which people enter or edit small, specific pieces of text.

What is Uitextfield?

An object that displays an editable text area in your interface.

How do I set the length of a TextField in flutter?

To change the TextField height by changing the Font Size: Step 1: Inside the TextField, Add the style parameter and assign the TextStyle(). Step 2: Inside the TextStyle(), Add the fontSize parameter and set the appropriate value. Step 3: Run the app.


2 Answers

Yes, you have two choices in my opinion, you can:

A. Check the number of chars returned in delegate method shouldChangeTextInRange and then if your limit is reached resign first responder (when you resign first responder the keyboard dismisses,

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

Or B:

Override the touchesEnded method of your view and call resignFirstResponder, so that when the user touches the view outside the textField, the keyboard dismisses. - this is what I do in my app.

Like this:

Just add this method to your viewController, it will be called automatically when the touch in the view ends, in this method you simply resignFirstResponder and the keyboard will disappear.

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

I think it's better to do this in touchesEnded than began, it 'feels' nicer to have the keyboard dismiss when you lift your finger from the view, rather than when to initially touch it.

like image 120
Woodstock Avatar answered Sep 22 '22 11:09

Woodstock


I found that resignFirstResponder do not include the last char typed. I had to do it in this way,

- (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;
}
like image 45
karim Avatar answered Sep 25 '22 11:09

karim