NSString+MLLabel.m 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //
  2. // NSString+MLLabel.m
  3. // Pods
  4. //
  5. // Created by molon on 15/6/13.
  6. //
  7. //
  8. #import "NSString+MLLabel.h"
  9. #import "NSAttributedString+MLLabel.h"
  10. @implementation NSString (MLLabel)
  11. - (NSUInteger)lineCount
  12. {
  13. if (self.length<=0) { return 0; }
  14. NSUInteger numberOfLines, index, stringLength = [self length];
  15. for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) {
  16. index = NSMaxRange([self lineRangeForRange:NSMakeRange(index, 0)]);
  17. }
  18. if ([self isNewlineCharacterAtEnd]) {
  19. return numberOfLines+1;
  20. }
  21. return numberOfLines;
  22. }
  23. - (BOOL)isNewlineCharacterAtEnd
  24. {
  25. if (self.length<=0) {
  26. return NO;
  27. }
  28. //检查最后是否有一个换行符
  29. NSCharacterSet *separator = [NSCharacterSet newlineCharacterSet];
  30. NSRange lastRange = [self rangeOfCharacterFromSet:separator options:NSBackwardsSearch];
  31. return (NSMaxRange(lastRange) == self.length);
  32. }
  33. - (NSString*)subStringToLineIndex:(NSUInteger)lineIndex
  34. {
  35. NSUInteger index = [self lengthToLineIndex:lineIndex];
  36. return [self substringToIndex:index];
  37. }
  38. - (NSUInteger)lengthToLineIndex:(NSUInteger)lineIndex
  39. {
  40. if (self.length<=0) {
  41. return 0;
  42. }
  43. NSUInteger numberOfLines, index, stringLength = [self length];
  44. for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++) {
  45. NSRange lineRange = [self lineRangeForRange:NSMakeRange(index, 0)];
  46. index = NSMaxRange(lineRange);
  47. if (numberOfLines==lineIndex) {
  48. NSString *lineString = [self substringWithRange:lineRange];
  49. if (![lineString isNewlineCharacterAtEnd]) {
  50. return index;
  51. }
  52. //把这行对应的换行符给忽略
  53. if (NSMaxRange([lineString rangeOfString:@"\r\n"])==lineString.length) {
  54. return index-2;
  55. }
  56. return index - 1;
  57. }
  58. }
  59. return 0;
  60. }
  61. - (NSAttributedString*)linkAttributedStringWithLinkRegex:(NSRegularExpression*)linkRegex groupIndexForDisplay:(NSInteger)groupIndexForDisplay groupIndexForValue:(NSInteger)groupIndexForValue{
  62. NSAttributedString *attStr = [[NSAttributedString alloc]initWithString:self];
  63. return [attStr linkAttributedStringWithLinkRegex:linkRegex groupIndexForDisplay:groupIndexForDisplay groupIndexForValue:groupIndexForValue];
  64. }
  65. @end