UITextView行数iOS 7
在iOS 6中,我使用这段代码来获取UITextView
的行数:
int numLines = textView.contentSize.height / textView.font.lineHeight;
但是这在iOS 7中不起作用。我如何获得iOS 7中UITextView的总行数?
你可以使用这样的东西。 这是低性能,但这是我可以直到现在的数字。
NSString *string=textView3.text; NSArray *array=[string componentsSeparatedByString:@"\n"]; NSLog(@"%d",array.count);
你可以用UITextView的UITextInputTokenizer
/ UITextInput
协议方法来做到这一点。
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 )
您可以将String和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; }