it-swarm.com.ru

Как ограничить символы в UITextField

У меня есть UITextField со следующими ограничениями - символы могут быть только числами, как в методе ниже. Я также хочу ограничить количество макс символов до 3 цифр. Как я могу изменить свой метод, чтобы сделать это?

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *aCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
for (int i = 0; i < [string length]; i++) {
    unichar aCharacter = [string characterAtIndex:i];
    if ([aCharacterSet characterIsMember:aCharacter]) {
        return YES;
    }
}

NSUInteger newLength = self.textField.text.length + string.length - range.length;
return (newLength > 3) ? NO : YES;
}
8
user594161

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

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];    
        return !([newString length] > 3);

}
13
venki

Ваш код близок Пытаться:

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

    NSCharacterSet *aCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    for (int i = 0; i < [string length]; i++) {
        unichar aCharacter = [string characterAtIndex:i];
        if (![aCharacterSet characterIsMember:aCharacter]) {
            return NO;
        }
    }

    NSUInteger newLength = self.textField.text.length + string.length - range.length;
    return (newLength > 3) ? NO : YES;
}
4
rmaddy

Установка максимального ограничения символов и числовой проверки в UITextField

Установка максимального ограничения символов в UITextField : - Мы не можем напрямую установить максимальную длину для UITextField, потому что у его класса нет свойства максимальной длины, но это может быть достигнуто с помощью следующего метода делегата текстового поля.

#define MAX_LENGTH 20

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

NSUInteger newLength = [textField.text length] + [string length] – range.length;

if(newLength > MAX_LENGTH){

     return NO;
   }
   else{
            return YES;
   }
}

Перед изменением текстового поля UITextField спрашивает делегата, следует ли изменить указанный текст. Текстовое поле не изменилось, поэтому мы берем его текущую длину и длину вставляемой строки за вычетом длины диапазона. Если это значение слишком длинное (более 20 символов в этом примере), верните NO, чтобы запретить изменение.

> Числовая проверка в UITextField

#define NUMBERS_ONLY 0123456789

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

{
if([textField isEqual:txtPhone])
{
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
    NSString *filteredstring  = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@””];
    return ([string isEqualToString:filteredstring]);
}
   return  TRUE;
}
2
Abdul Karim

Вы можете добавить наблюдателя в UITextFieldTextDidChangeNotification

// добавляем эту строку в viewDidLoad

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(limitTextField) name:UITextFieldTextDidChangeNotification object:nil];

//dealloc add this 
[[NSNotificationCenter defaultCenter]removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];

// метод для ограничения символов текстового поля

-(void)limitTextField
{
   textField.text = [textField.text substringToIndex:3];
}

// или установить делегат текстового поля и использовать это 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if([textField.text length]<=3)
   return YES;
else
   return NO;
}

и установите keyBoardType текстового поля как UIKeyboardTypeNumberPad, чтобы получить только числа. Я не тестировал и не компилировал код, просто написал логику. Надеюсь, поможет :)

2
sanjaymathad

Попробуй это:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *aCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSString *filtered =  [[string componentsSeparatedByCharactersInSet:aCharacterSet] componentsJoinedByString:@""];
if ((textField.text.length >2) && (!(string.length == 0)))
            return NO;
        else
            return [string isEqualToString:filtered];
}
0
user523234

объявить таким образом

 #define MAX_LENGTH_FULLNAME 3

#pragma mark - TextField Delegate method
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    if([string length]==0){
        return YES;
    }
    NSUInteger newLength = [textField.text length] + [string length] - range.length;

    if ([string isEqualToString:@"\n"]) {
        [self.txtAnswer resignFirstResponder];
        return NO;
    }
    if (textField == self.txtFName){
        /* for backspace */
        if([string length]==0){
            return YES;
        }
        if (newLength > MAX_LENGTH_FULLNAME) {
            if([string length] > MAX_LENGTH_FULLNAME){
                textField.text = [string substringToIndex:MAX_LENGTH_FULLNAME];
            }
            return NO;
        }
      NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];


        for (int i = 0; i < [string length]; i++) {
            unichar c = [string characterAtIndex:i];
            if ([myCharSet characterIsMember:c]) {
                return YES;
            }
        }
        return NO;

    }
return YES;
}

чтобы разрешить только цифры, вы также можете просто определить этот путь 

[textField setKeyboardType:UIKeyboardTypeNumberPad];
0
Banker Mittal

Это наверняка поможет.

Это дублированный ответ: Проверьте это Answer Установите максимальную длину символа UITextField

0
Basil Mariano