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


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

textview.h

@property (nonatomic,strong) IBOutlet UITextView *textField;
@property (nonatomic, retain) NSString *userText;

textview.m

- (IBAction)next:(id)sender {

    self.userText = self.textField.text;

    if ([self.textField.text length] == 0) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error!"
                                                                message:@"Enter some text"
                                                               delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alertView show];
        }
}

Вот метод ограничения текста, который, похоже, не работает,

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

    if(range.length + range.location > textField.text.length)
    {
        return NO;

    } else {

    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return newLength <= 70;
    return (textField.text.length <= 70);
}
}
3 3

3 ответа:

1) добавьте UITextViewDelegate в свой viewcontroller следующим образом

@interface ViewController : UIViewController <UITextViewDelegate>

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

TextView: shouldChangeCharactersInRange: replacementString

2) затем напишите следующий код. вместо 140 можно поставить любое число ты хочешь.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    return textView.text.length + (text.length - range.length) <= 140;
}

Для получения дополнительной справки взгляните на UItextView

Решение Swift 2.0

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    return textView.text.characters.count + (text.characters.count - range.length) <= textViewLimit
}

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

 - (BOOL)isAcceptableTextLength:(NSUInteger)length {
    return length <= 70;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string {
    return [self isAcceptableTextLength:textField.text.length + string.length - range.length];
}

-(IBAction)checkIfCorrectLength:(id)sender{
    if (![self isAcceptableTextLength:self.textField.text.length]) {
        // do something to make text shorter
    }
}

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

#pragma mark - Textview Delegate
 -(void)textViewDidChange:(UITextView *)textView
 {   
    NSString *temp = textView.text;
   titleLength = textView.text.length;
   if (titleLength > RESTRICTED_LENGHT ) 
    {
    textView.text = [temp substringToIndex:RESTRICTED_LENGHT];
    }
 }

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

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
     if([text length] == 0)
      {
        if([textView.text length] != 0)
        {
          return YES;
        }
     }
   else if([[textView text] length] > 139)
    {
       return NO;
    }
   return YES;
}