Как ограничить символы в 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 ответа:
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; }