7

iOS 6 では、このコードを使用して次の行数を取得しましたUITextView

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

しかし、これは iOS 7 では機能しません。iOS 7 で UITextView の総行数を取得するにはどうすればよいですか?

4

3 に答える 3

4

これは、 UITextViewのUITextInputTokenizer/ protocol メソッドで行うことができます。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 (??)

(要旨)

于 2014-05-25T14:50:02.890 に答える
4

このようなものを使用できます。パフォーマンスは低いですが、これは私が今まで理解できたものです。

NSString *string=textView3.text;
NSArray *array=[string componentsSeparatedByString:@"\n"];
NSLog(@"%d",array.count);
于 2013-10-01T18:46:19.643 に答える
0

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;
}
于 2015-01-11T16:15:50.030 に答える