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;
}
UITextViewのcontentSizeプロパティを見て、テキストの高さをピクセル単位で取得し、UITextViewのフォントの行の高さの間隔で割って、UIScrollView全体(画面のオンとオフ)のテキスト行数を取得できます。折り返しテキストと改行テキストの両方。
IOS 7では、次のようになります。
float rows = (textView.contentSize.height - textView.textContainerInset.top - textView.textContainerInset.bottom) / textView.font.lineHeight;
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