2013-10-01 3 views
7

В IOS 6 Я использовал этот код, чтобы получить количество строк в UITextView:UITextView количества линий IOS 7

int numLines = textView.contentSize.height/textView.font.lineHeight; 

Но это не работает в прошивке 7. Как получить общее количество строки UITextView в iOS 7?

+0

посмотрите здесь: http://stackoverflow.com/questions/19028743/ios7-uitextview-contentsize-height-alternative/19067476#19067476 –

+0

Возможный дубликат: http://stackoverflow.com/questions/5837348/counting-the -число ber-of-lines-in-a-textview-lines-wrapped-by-size – Szu

+0

Возможный дубликат [Подсчет количества строк в UITextView, строки, обернутые размером фрейма] (https://stackoverflow.com/ Вопросы/5837348/counting-the-number-of-lines-in-a-uitextview-lines-wrapped by-frame-size) – Ultimecia

ответ

4

Вы можете использовать что-то вроде этого. Это низкая производительность, но это то, что я мог бы представить до сих пор.

NSString *string=textView3.text; 
NSArray *array=[string componentsSeparatedByString:@"\n"]; 
NSLog(@"%d",array.count); 
+10

Это только количество разрывов строк, а не линейных оберток, если только ваш UITextView не настолько широк, что нет обертывания. – mahboudz

+0

Как можно получить количество строк при учете упаковки? –

4

Вы можете сделать это с помощью методов протокола в UITextInputTokenizer/UITextInput из UITextView.

id<UITextInputTokenizer> tokenizer = textView.tokenizer; 
UITextPosition *pos = textView.endOfDocument; int lines = 0; 

while (true){ 
    UITextPosition *lineEnd = [tokenizer positionFromPosition:pos toBoundary:UITextGranularityLine inDirection:UITextStorageDirectionBackward]; 

    if([textView comparePosition:pos toPosition:lineEnd] == NSOrderedSame){ 
     pos = [tokenizer positionFromPosition:lineEnd toBoundary:UITextGranularityCharacter inDirection:UITextStorageDirectionBackward]; 

     if([textView comparePosition:pos toPosition:lineEnd] == NSOrderedSame) break; 

     continue; 
    } 

    lines++; pos = lineEnd; 
} 

//lines--; // Compensation for extra line calculated (??) 

(GIST)

+0

Это сработало для меня, как только я удалил последнюю строку кода. –

+0

@JasonTyler Интересно, почему в моих тестах была дополнительная строка. Рад, что это сработало для вас. – mattsven

+0

Возможно, вы тестируете на iPhone 6+ правильно? @mattsven? –

0

вы можете передать строку и TextView к этому методу, и он будет возвращать текущее число строки в этом TextView, даже если пользователь нажал новую строку:

-(int)numberOfRows:(NSString *)string inView:(UITextView*)txtView 
{ 

CGSize maximumLabelSize = CGSizeMake(MAXFLOAT , MAXFLOAT); 

NSStringDrawingOptions options = NSStringDrawingTruncatesLastVisibleLine | 
NSStringDrawingUsesLineFragmentOrigin; 

NSString *new = [string stringByReplacingOccurrencesOfString: @"\n" withString:@" "]; 
NSDictionary *attr = @{NSFontAttributeName: [UIFont fontWithName:urFont size:urSize]}; 
CGRect bounds = [new boundingRectWithSize:maximumLabelSize 
              options:options 
             attributes:attr 
              context:nil]; 

CGSize viewSize = bounds.size; 


int row = floor(txtView.contentSize.height/viewSize.height) ; 


return row; 
} 
Смежные вопросы