web-dev-qa-db-ja.com

UITextViewの行数の読み方

UITextViewを使用しています。ビューで、次の関数を使用して'\n'を読み取るtextviewに含まれる行数をカウントする必要があります。ただし、これはキーボードからリターンキーが押された場合にのみ機能しますが、行warapperの場合(連続文字を入力すると改行文字が表示されません)。リターンキーを押さずに行が変更されたときに新しい文字を読み取るにはどうすればよいですか?誰もが方法を知らない..それを共有してください..私はこのリンクをたどっています リンク

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
 replacementText:(NSString *)text
{
    // Any new character added is passed in as the "text" parameter
    if ([text isEqualToString:@"\n"]) {
        // Be sure to test for equality using the "isEqualToString" message
        [textView resignFirstResponder];

        // Return NO so that the final '\n' character doesn't get added
        return NO;
    }
    // For any other character return YES so that the text gets added to the view
    return YES;
}
24
santosh

UITextViewのcontentSizeプロパティを見て、テキストの高さをピクセル単位で取得し、UITextViewのフォントの行の高さの間隔で割って、UIScrollView全体(画面のオンとオフ)のテキスト行数を取得できます。折り返しテキストと改行テキストの両方。

26
hotpaw2

IOS 7では、次のようになります。

float rows = (textView.contentSize.height - textView.textContainerInset.top - textView.textContainerInset.bottom) / textView.font.lineHeight;
27
Soul Clinic
extension NSLayoutManager {
    var numberOfLines: Int {
        guard let textStorage = textStorage else { return 0 }

        var count = 0
        enumerateLineFragments(forGlyphRange: NSMakeRange(0, numberOfGlyphs)) { _, _, _, _, _ in
            count += 1
        }
        return count
    }
}

TextViewの行数を取得します。

let numberOfLines = textView.layoutManager.numberOfLines
4
Lizhen Hu