2010-08-27 30 views
23

Tôi đang sử dụng UITextView Trong chế độ xem của mình, tôi có yêu cầu đếm số dòng chứa trong textview đang sử dụng hàm sau để đọc '\n'. Tuy nhiên điều này chỉ hoạt động khi phím return được nhấn từ bàn phím, nhưng trong trường hợp dòng warapper (khi tôi gõ ký tự liên tục, tôi sẽ không nhận được dòng mới char). Làm thế nào để tôi đọc char mới khi dòng được thay đổi mà không cần nhấn phím return ?? Bất kỳ ai có ý tưởng làm thế nào để nay .. xin vui lòng chia sẻ nó .. Tôi follwing liên kết này LinkCách đọc Số dòng trong UITextView

- (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; 
} 
+3

Hai giá trị của 'BOOL' không phải là' TRUE' và 'FALSE'; chúng là 'YES' và' NO'. – BoltClock

Trả lời

26

Bạn có thể nhìn vào tài sản của UITextView bạn contentSize để có được chiều cao của văn bản bằng pixel, và chia cho khoảng cách chiều cao dòng của phông chữ UITextView để nhận được số dòng văn bản trong tổng UIScrollView (màn hình bật và tắt), bao gồm cả văn bản được ngắt dòng và dòng.

+62

numLines = textView.contentSize.height/textView.font.lineHeight; – nacho4d

+1

tôi đã giải quyết câu lệnh này với numLines = textView.contentSize.height/textView.font.leading; – santosh

+8

'textView.font.leading' không được chấp nhận trong iOS4. Sử dụng 'textView.font.lineHeight'. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIFont_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instp/UIFont/leading – cnotethegr8

27

Trong iOS 7, nó chính xác nên là:

float rows = (textView.contentSize.height - textView.textContainerInset.top - textView.textContainerInset.bottom)/textView.font.lineHeight; 
+13

Câu trả lời rất hay nhưng nó sai ở một số kích thước phông chữ do kết quả được đưa vào int. Làm tròn nó để tránh các lỗi: 'float rows = round ((textView.contentSize.height - textView.textContainerInset.top - textView.textContainerInset.bottom)/textView.font.lineHeight);' –

+0

@Ricardo Sánchez-Sáez: bạn đúng . – Jacky

+0

Tôi không nghĩ 'round' tốt hơn' tầng', vì 'contentSize' luôn lớn hơn' textView' 'text'. @ RicardoSánchez-Sáez –

-5

Chỉ cần để tham khảo ...

Một cách khác bạn có thể nhận được số dòng và cũng là nội dung, được tách dòng trong một mảng bằng cách sử dụng cùng một phương pháp được đề cập đến trong câu trả lời chỉnh sửa bởi BoltClock.

Bạn có thể lặp qua mảng để lấy nội dung của mỗi dòng và bạn có thể sử dụng [số lượng hàng] để nhận số hàng chính xác.

Một điều cần lưu ý là các dòng trống sẽ được tính là tốt.

+2

Điều này không hoạt động nếu văn bản kết thúc tốt đẹp do bọc đường (tức là phím quay lại không được nhấn). –

Các vấn đề liên quan