gpt4 book ai didi

ios - 由于行数和字符数,UITextView 限制文本

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:27:47 33 4
gpt4 key购买 nike

我有一个 UITextView,我希望最多有两行。

当 TextView 达到两行并达到其宽度的末尾时,我希望它停止接受任何新字符。

我测试过:

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

这使得 TextView 的 UI 看起来正确,但它仍然接受新字符并使文本超出 UI 中的可见范围。

仅仅限制字符的数量并不是一个好主意,因为每个字符都有自己的宽度和高度。

我正在使用自动布局。

最佳答案

在 TextView 的委托(delegate)中,您可以使用 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;
}

关于ios - 由于行数和字符数,UITextView 限制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405357/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com