2010-08-27 53 views
23

我正在使用UITextView在我的視圖中,我有要求統計文本視圖所包含的行數使用以下函數來讀取'\n'。然而,這隻適用於從鍵盤按下返回鍵時,但如果行warapper(當我鍵入連續字符我不會得到新行字符)。如何在不更改返回鍵的情況下更改行時如何讀取新的char?任何人有否知道如何..請分享.. 我follwing這個鏈接Link如何閱讀在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

'BOOL'的兩個值不是'TRUE'和'FALSE';他們是'是'和'否'。 – BoltClock 2010-08-27 15:28:22

回答

26

你可以看看你的UITextView的contentSize屬性來獲取像素文本的高度,再除以UITextView字體的行高度間距,以獲得總UIScrollView(開和關屏幕)中的文本行數,包括包裝和行斷開的文本。

+62

numLines = textView.contentSize.height/textView.font.lineHeight; – nacho4d 2010-08-27 17:46:17

+1

我解決了這個問題numLines = textView.contentSize.height/textView.font.leading; – santosh 2010-09-06 13:31:05

+8

'textView.font.leading'在iOS4中已棄用。使用'textView.font.lineHeight'。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIFont_Class/DeprecationAppendix/AppendixAdeprecatedAPI.html#//apple_ref/occ/instp/UIFont/leading – cnotethegr8 2013-07-11 05:56:36

27

在iOS系統7,它應該正好是:

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

非常好的答案,但由於結果被轉換爲int,所以在某些字體大小時出錯。舍入它以避免錯誤:'float rows = round((textView.contentSize.height - textView.textContainerInset.top - textView.textContainerInset.bottom)/ textView.font.lineHeight);' – 2014-06-09 20:34:58

+0

@RicardoSánchez-Sáez:你是對的。 – Jacky 2015-12-07 06:35:37

+0

我不認爲'round'比'floor'好,因爲'contentSize'總是大於'textView'的'text'。 @RicardoSánchez-Sáez – 2016-10-26 04:53:58

-5

僅供參考...

的另一種方式,你可以得到的行數,也是內容,被劃分在該線數組使用BoltClock的答案編輯中提到的相同方法。

NSArray *rows = [textView.text componentsSeparatedByString:@"\n"]; 

您可以遍歷數組以獲取每行的內容,並且您可以使用[rows count]來獲取確切的行數。

有一點要記住,空行也會被計算在內。

+2

如果由於換行換行(即沒有按下返回鍵),則這不起作用。 – 2015-02-12 20:51:29