[objective-c]限制内 UITextView 的行数

发布时间: 2016/10/2 5:35:37
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我很清楚这质询,但我无法找到一个有效的答案。 使用事先解决方案组合我想出了这段代码︰

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string
{
    int numLines = notesTextView.contentSize.height / notesTextView.font.lineHeight;
        if (numLines <= 8)
        {
            return true;
        }
        return false;
}

这不能因为我们仍然采取了我们想要什么,并没有进一步的编辑是可能然后困在它的底线的行数计数之前附加文本。

我也试过检测"\n"条目的解决方案,但这也行不通,因为我们能到达新线自然没有按回车键。

解决方法 1:

我也遇到这个问题。没有更早的解决方案很好为我工作。这里是我的解决方案,希望: (iOS 7 + 只 !)

- (void)textViewDidChange:(UITextView *)textView
{
    NSLayoutManager *layoutManager = [textView layoutManager];
    NSUInteger numberOfLines, index, numberOfGlyphs = [layoutManager numberOfGlyphs];
    NSRange lineRange;
    for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++)
    {
            (void) [layoutManager lineFragmentRectForGlyphAtIndex:index
                                               effectiveRange:&lineRange];
        index = NSMaxRange(lineRange);
    }

    if (numberOfLines > 3)
    {
        // roll back
        _labelField.text = _text;
    }
    else
    {
        // change accepted
        _text = _labelField.text;
    }
}

它使用 NSString 埃法尔 _text 能够滚回来后更改文本。这不会导致任何忽隐忽现。

numberOfLines 参考︰ https://developer.apple.com/library/mac/documentation/cocoa/conceptual/TextLayout/Tasks/CountLines.html#//apple_ref/doc/uid/20001810-CJBGBIBB

官方微信
官方QQ群
31647020