2015-11-13 48 views
1

当使用UITextView在Objective-C中收集用户输入时,如何限制用户每次尝试执行多个换行符?UITextView - 最大换行符

所以,这将是罚款:

This is my text. 

Here is some more text. 

但是这不会是罚款:

This is my text. 




Here is some more text way down here. 

回答

1

在你ViewController.h添加UITextViewDelegate

YourViewController : UIViewController <UITextViewDelegate> 

,并在ViewController.m以这种方式实现方法textView:shouldChangeTextInRange:replacementText:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    if ([text isEqualToString:@"\n"]) { 
     NSMutableString *futureString = [textView.text mutableCopy]; 
     [futureString insertString:text atIndex:range.location]; 

     NSRange rangeOflineBreaks = [futureString rangeOfString:@"\n\n\n"]; 
     if (rangeOflineBreaks.location != NSNotFound) { 
      return NO; 
     } 
    } 
    return YES; 
} 

这将被执行的每个用户想要添加一些文本TextView的,并不会让他添加一个换行符如果它注意到他想要添加换行符之前的时间和它发现,试图将它添加后(这就是为什么futureString的名称)三重线断点模式。在那种情况下,他不会让用户添加另一个换行符。

试试吧,它应该工作:)

PS:在不要忘记设置你的TextView委托的viewController的viewDidLoadyourTextView.delegate = self

+0

不要在.h文件中添加'UITextViewDelegate' 。将其添加到扩展名为.m的.m文件中。无需向全世界宣布该课程使用文本视图。 – rmaddy

+0

顺便说一句 - 此代码仅适用于用户每次在键盘上轻敲一个键并且当时没有选择的情况。如果用户将任何文本粘贴到文本视图中,则不起作用。你对'futureString'的计算也是不正确的。如果用户在键入或粘贴之前选择了任何文本,则不起作用。它不处理用户删除文本。 – rmaddy