UITextField ограничение-iphone - PullRequest
       0

UITextField ограничение-iphone

0 голосов
/ 12 августа 2011

У меня в приложении 4 текстовых поля

1.username 2.Email 3.Age 4.Password

Имена пользователей состоят из 3-25 символов и содержат только символы [a-z0-9]

Возраст должен быть в диапазоне от 1 до 100 включительно.

Пароли должны содержать от 4 до 12 символов и использовать только символы [a-zA-Z0-9]

как я могу ограничить текстовое поле вышеуказанными требованиями

пожалуйста, кто-нибудь поможет мне сделать это ..

Спасибо за ваши усилия и внимание.

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Вы можете проверять числа как тип пользователя, применяя метод -[UITextField textField:shouldChangeCharactersInRange:replacementString:].Обратите внимание, что этот метод вызывается до изменения , поэтому вам нужно создать текст, который может быть результатом действий пользователя самостоятельно.Например:

-(BOOL)textField:(UITextField*)textField: shouldChangeCharactersInRange:(NSRange*)range
                                                      replacementString:(NSString*)string;
{
    NSString* text = [textField.text stringByReplacingCharactersInRange:range
                                                             withString:string];
    // text is now the potential string you should check against.
}

То, что вы делаете оттуда, зависит только от вас.Вот некоторые примеры:

// Too short?
if ([text length] < 4) ...

// Invalid character?
NSCharacterSet* invalidChars = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
if ([text rangeOfCharacterInSet:invalidChars].location != NSNotFound) ...

Для более сложной проверки чисел я бы использовал NSNumberFormatter, который поддерживает проверку диапазонов и многое другое.

1 голос
/ 12 августа 2011

Вы можете использовать методы в протоколе UITextFieldDelegate для проверки содержимого ваших полей.

Более конкретно, вы используете:

– textFieldShouldEndEditing:
- textFieldShouldReturn:

иливы можете использовать:

- textField:shouldChangeCharactersInRange:replacementString:

В первом случае вы можете проверить только когда пользователь заканчивает редактирование текстового поля;во втором случае вы можете выполнять проверку при каждом нажатии клавиши.

Во всех этих методах вы получаете аргумент textField, доступ к которому вы можете получить следующим образом:

NSString* text = textField.text;
NSUInterger length = [text length];
if (length.....) {
 // -- show alert or whatever
return NO;
}
0 голосов
/ 19 августа 2013

Вы можете использовать UITextFieldDelegate, чтобы сделать то, что вы хотите.Присвойте разные значения textfield.tag для каждого поля в методе - (void)viewDidLoad и сопоставьте эти значения тега, чтобы найти соответствующее поле в (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string.

#define USERNAME_FIELD_TAG 1
#define PASSWORD_FIELD_TAG 2
#define EMAIL_FIELD_TAG 3
#define AGE_FIELD_TAG 4

#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField.tab == USERNAME_FIELD_TAG)
    {
        if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[a-z0-9]{3,35}"] evaluateWithObject:string] == FALSE)
        {
            textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range];
            [self selectTextForInput:textField atRange:range];
            return NO;
        }
    }
    else if (textField.tab == PASSWORD_FIELD_TAG)
    {
        if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[a-zA-Z0-9]{4,12}"] evaluateWithObject:string] == FALSE)
        {
            textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range];
            [self selectTextForInput:textField atRange:range];
            return NO;
        }
    }
    else if (textField.tab == EMAIL_FIELD_TAG)
    {
        if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"] evaluateWithObject:string] == FALSE)
        {
            textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range];
            [self selectTextForInput:textField atRange:range];
            return NO;
        }
    }
    else if (textField.tab == AGE_FIELD_TAG)
    {
        if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[1-100]"] evaluateWithObject:string] == FALSE)
        {
            textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range];
            [self selectTextForInput:textField atRange:range];
            return NO;
        }
    }

    return YES;
}

// place the cursor at given possition
-(void)selectTextForInput:(UITextField *)input atRange:(NSRange)range {
    UITextPosition *start = [input positionFromPosition:[input beginningOfDocument]
                                                 offset:range.location];
    UITextPosition *end = [input positionFromPosition:start
                                               offset:range.length];
    [input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...