2015-07-29 3 views
3

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

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); 
} 
} 

ответ

8

1) добавить UITextViewDelegate в вашем ViewController как это

@interface ViewController : UIViewController <UITextViewDelegate> 

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

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 
} 
0

Попробуйте

- (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 
    } 
} 
+0

привет спасибо за ответ, я очень новичок в развитии ios, любая дополнительная помощь будет применена – smithyy

0

вы можете использовать ниже код, чтобы ограничить TextView символов в первом методе вы можете установить ограниченную длину для текстового поля или если вы прошлый текст, который больше, чем ваш ограниченный текст, он создаст подстроку этой строки, чтобы исправить длину для 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]; 
    } 
} 

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

- (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; 
} 
Смежные вопросы