防止用户在 uitextview 中输入更多字符

Prevent user from entering more characters into uitextview

在 textview 达到给定高度后,如何防止用户在 uitextview 中输入更多字符?这是我认为可行但行不通的代码。我无法再输入任何字符,但出于某种原因我什至无法删除任何字符..

   - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {

        if (textView.frame.size.height > 102)
        {
            return NO;
        }
        return YES;
}

有什么想法吗? :(

创建一个与编辑产生的内容相匹配的新字符串。如果新字符串比现有字符串短,return YES 也。

示例:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSMutableString *string = [NSMutableString stringWithString:[textView text]];
    [string replaceCharactersInRange:range withString:text];
    BOOL deleted = [string length] < [[textView text] length];
    if (deleted) {
        NSLog(@"Characters deleted");
        return YES;
    }
    if (textView.frame.size.height > 102)
    {
        return NO;
    }
    return YES;
}

这个有用吗?

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {

        NSLayoutManager* layoutManager = textView.layoutManager;
        NSTextContainer* textContainer = textView.textContainer;
        int glyphCount = layoutManager.numberOfGlyphs;
        if(text.length == 0) glyphCount--; //deleting

        CGRect textRect = [layoutManager boundingRectForGlyphRange:NSMakeRange(0, glyphCount) inTextContainer: textContainer];

        if (textRect.size.height > 102)
        {
            return NO;
        }
        return YES;
}