【问题标题】:UITextView - Max line breaksUITextView - 最大换行符
【发布时间】:2015-11-14 08:23:16
【问题描述】:

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

所以,这样就好了:

This is my text.

Here is some more text.

但是这样就不好了:

This is my text.




Here is some more text way down here.

【问题讨论】:

    标签: ios objective-c uitextview


    【解决方案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:别忘了在viewDidLoadyourTextView.delegate = self)中设置你的textView委托viewController

    【讨论】:

    • 不要在 .h 文件中添加UITextViewDelegate。将其添加到具有类扩展名的 .m 文件中。无需向全世界宣布该课程适用于文本视图。
    • BTW - 此代码仅在用户一次敲击键盘上的一个键并且当时没有选择时才有效。如果用户将任何文本粘贴到文本视图中,它将不起作用。您对futureString 的计算也不正确。如果用户在键入或粘贴之前选择了任何文本,则它不起作用。而且它不处理用户删除文本。
    • 如何在 Swift 中编写这个?
    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多