2013-03-29 3 views
1

У меня есть UITextField в моем приложении iOS, где я уже изменяю вход пользователя. Теперь я понимаю, что мне нужно также убедиться, что UITextField может содержать определенное количество символов. Я реализую метод делегата следующим образом:Пытается ограничить количество символов UITextField в iOS

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

    if([[string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]] 
     isEqualToString:@""]) 
     return YES; 

    NSString *previousValue = [[[textField.text stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] stringByReplacingOccurrencesOfString:@"." withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@""]; 
    string = [string stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]; 
    NSString *modifiedValue = [NSString stringWithFormat:@"%@%@", previousValue, string]; 

    if ([modifiedValue length] == 1) { 

     modifiedValue = [NSString stringWithFormat:@"0.0%@", string]; 

    } 

    else if ([modifiedValue length] == 2) { 

     modifiedValue = [NSString stringWithFormat:@"0.%@%@", previousValue, string]; 

    } 

    else if ([modifiedValue length] > 2) { 

     modifiedValue = [NSString stringWithFormat:@"%@.%@",[modifiedValue substringToIndex: modifiedValue.length-2],[modifiedValue substringFromIndex:modifiedValue.length-2]]; 

    } 


    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithString:modifiedValue]; 
    modifiedValue = [formatter stringFromNumber:decimal]; 
    [textField setText:modifiedValue]; 

    return NO; 

} 

Я не уверен, что с моим кодом выше, как фактор ограничения 22 символов. Может ли кто-нибудь увидеть, что мне нужно делать?

+0

вы хотите ввести данные Шифрование до 22 символов в текстовое поле справа? – Balu

+0

Возможный дубликат [Установить максимальную длину символа UITextField] (http://stackoverflow.com/questions/433337/set-the-maximum-character-length-of-a-uitextfield) – Larme

ответ

3

попробовать, как это,

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

ИЛИ

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

return (textField.text.length <= 22); 
} 
+1

Нет необходимости в подробностях. Почему не просто 'return (textField.text.length <= 22);' – borrrden

+0

Как 'if ([длина текста] <= 22)' уже возвращает bool, почему не 'return [длина текста] <= 22; ' –

+0

да, конечно, мы можем использовать и этот. – Balu

2

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

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    // allow adding of chars 
    if (textField.text.length < MAX_CHARS) { 
     return YES; 
    } 
    // allow deleting 
    if (textField.text.length == MAX_CHARS && string.length == 0) { 
     return YES; 
    } 

    return NO; 
} 

Это не симпатичным решение и, вероятно, может быть уточнена для обработки дополнительных случаев, но это работало хорошо для моих потребностей и думал, что это может быть полезным для кого-то другого.

0
if ((string.length == 0) || textField.text.length <= MAX_LIMIT) 
     return YES; 
    else 
     return NO; 

Это решение, которое я считаю совершенным.

0

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

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


     print("chars \(textField.text!.characters.count) \(string)") 

     if(textField.text!.characters.count > 20 && range.length == 0) { 
      print("Please summarize in 20 characters or less") 
      return false; 
     } 

     return true; 
} 
Смежные вопросы