[ios]UITextView 由于数量的行和字符数的限制文本

发布时间: 2015/4/5 9:04:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有 UITextView ,,有两个行最大。

当文本视图已达到两行和其宽度的结束时,我想要它停止接受任何新的字符。

我有测试:

UITextView *textView = ...
textView.textContainer.maximumNumberOfLines = 2;

这使文本视图的 UI 看起来正确,但它仍然接受新的字符和成长的文本超出了人们在 UI 中可见。

仅仅限制的字符数会不是一个伟大的想法,因为每字都有它自己的宽度和高度。

我正在使用自动布局。

解决方法 1:

在文本视图的委托,您可以使用 textView:shouldChangeTextInRange:replacementText: 来返回是否应接受文本输入。这里是一个片断,它计算的新的文本将是多高,并返回 true 只当文本的最大字符数小于允许和适合在两行上:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSString *newText = [textView.text stringByReplacingCharactersInRange:range withString:text];

    NSDictionary *textAttributes = @{NSFontAttributeName : textView.font};

    CGFloat textWidth = CGRectGetWidth(UIEdgeInsetsInsetRect(textView.frame, textView.textContainerInset));
    textWidth -= 2.0f * textView.textContainer.lineFragmentPadding;
    CGRect boundingRect = [newText boundingRectWithSize:CGSizeMake(textWidth, 0)
                                                options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
                                             attributes:textAttributes
                                                context:nil];

    NSUInteger numberOfLines = CGRectGetHeight(boundingRect) / textView.font.lineHeight;

    return newText.length <= 500 && numberOfLines <= 2;
}
官方微信
官方QQ群
31647020