| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- //
- // NSString+MLLabel.m
- // Pods
- //
- // Created by molon on 15/6/13.
- //
- //
- #import "NSString+MLLabel.h"
- #import "NSAttributedString+MLLabel.h"
- @implementation NSString (MLLabel)
- - (NSUInteger)lineCount
- {
- if (self.length<=0) { return 0; }
-
- NSUInteger numberOfLines, index, stringLength = [self length];
- for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) {
- index = NSMaxRange([self lineRangeForRange:NSMakeRange(index, 0)]);
- }
-
- if ([self isNewlineCharacterAtEnd]) {
- return numberOfLines+1;
- }
-
- return numberOfLines;
- }
- - (BOOL)isNewlineCharacterAtEnd
- {
- if (self.length<=0) {
- return NO;
- }
- //检查最后是否有一个换行符
- NSCharacterSet *separator = [NSCharacterSet newlineCharacterSet];
- NSRange lastRange = [self rangeOfCharacterFromSet:separator options:NSBackwardsSearch];
- return (NSMaxRange(lastRange) == self.length);
- }
- - (NSString*)subStringToLineIndex:(NSUInteger)lineIndex
- {
- NSUInteger index = [self lengthToLineIndex:lineIndex];
-
- return [self substringToIndex:index];
- }
- - (NSUInteger)lengthToLineIndex:(NSUInteger)lineIndex
- {
- if (self.length<=0) {
- return 0;
- }
-
- NSUInteger numberOfLines, index, stringLength = [self length];
- for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) {
- NSRange lineRange = [self lineRangeForRange:NSMakeRange(index, 0)];
- index = NSMaxRange(lineRange);
-
- if (numberOfLines==lineIndex) {
- NSString *lineString = [self substringWithRange:lineRange];
- if (![lineString isNewlineCharacterAtEnd]) {
- return index;
- }
- //把这行对应的换行符给忽略
- if (NSMaxRange([lineString rangeOfString:@"\r\n"])==lineString.length) {
- return index-2;
- }
-
- return index - 1;
- }
- }
-
- return 0;
- }
- - (NSAttributedString*)linkAttributedStringWithLinkRegex:(NSRegularExpression*)linkRegex groupIndexForDisplay:(NSInteger)groupIndexForDisplay groupIndexForValue:(NSInteger)groupIndexForValue{
- NSAttributedString *attStr = [[NSAttributedString alloc]initWithString:self];
- return [attStr linkAttributedStringWithLinkRegex:linkRegex groupIndexForDisplay:groupIndexForDisplay groupIndexForValue:groupIndexForValue];
- }
- @end
|