7 在属性字符串中加入图片

我们需要使用一个文本附件:

  1. - (NSAttributedString *) prettyName
  2. {
  3. NSTextAttachment *p_w_upload;
  4. p_w_upload = [[[NSTextAttachment alloc] init] autorelease];
  5. NSCell *cell = [p_w_upload p_w_uploadCell];
  6. NSImage *icon = [self icon]; // or wherever you are getting your p_w_picpath
  7. [cell setImage: icon];
  8. NSString *name = [self name];
  9. NSAttributedString *attrname;
  10. attrname = [[NSAttributedString alloc] initWithString: name];
  11. NSMutableAttributedString *prettyName;
  12. prettyName = (id)[NSMutableAttributedString attributedStringWithAttachment:
  13. p_w_upload]; // cast to quiet compiler warning
  14. [prettyName appendAttributedString: attrname];
  15. return (prettyName);
  16. }

这样就可以在字符串前面加入图片。如果需要在字符串中加入图片就需要创建通过附件创建一个属性字符串,然后将其加入到最终的属性字符串中。

8 除去字符串中的换行符
假定有一个字符串,你想除去换行符。你可以像脚本语言一样进行一个分割/合并操作,或者制作一个可变的拷贝并进行处理:

  1. NSMutableString *mstring = [NSMutableString stringWithString:string];
  2. NSRange wholeShebang = NSMakeRange(0, [mstring length]);
  3. [mstring replaceOccurrencesOfString: @"
  4. withString: @""
  5. options: 0
  6. range: wholeShebang];
  7. return [NSString stringWithString: mstring];

(这也可用于通用的字符串操作,不仅经是除去换行符)
该方法比分割/合并至少省一半的时间。当然可能结果不会造成太多的不同。在一个简单的测试中,处理一个1.5兆文件中36909个新行,分割/合并操作花费了0.124秒,而上述方法仅需0.071秒。

9 字串匹配

  1. NSRange range = [[string name] rangeOfString: otherString options: NSCaseInsensitiveSearch];

10 今天日期的字符串
将一个日期转换成字符串的通用方法就是通过NSDateFormatter。有时你想生成一个格式比较友好的日期字符串。比如你需要"December 4, 2007",这种情况下就可以使用:

  1. [[NSDate date] descriptionWithCalendarFormat: @"%B %e, %Y" timeZone: nil locale: nil]

(感谢Mike Morton提供该方法)

11 除去字符串末尾的空格

  1. NSString *ook = @"\n \t\t hello there \t\n \n\n";
  2. NSString *trimmed =
  3. [ook stringByTrimmingCharactersInSet:
  4. [NSCharacterSet whitespaceAndNewlineCharacterSet]];
  5. NSLog(@"trimmed: '%@'", trimmed);

输出结果是:
2009-12-24 18:24:42.431 trim[6799:903] trimmed: 'hello there'

图形
1 绘制一个粗体字符串

  1. - (void) drawLabel: (NSString *) label
  2. atPoint: (NSPoint) point
  3. bold: (BOOL) bold {
  4. NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
  5. NSFont *currentFont = [NSFont userFontOfSize: 14.0];
  6. if (bold) {
  7. NSFontManager *fm = [NSFontManager sharedFontManager];
  8. NSFont *boldFont = [fm convertFont: currentFont
  9. toHaveTrait: NSBoldFontMask];
  10. [attributes setObject: boldFont
  11. forKey: NSFontAttributeName];
  12. } else {
  13. [attributes setObject: currentFont
  14. forKey: NSFontAttributeName];
  15. }
  16. [label drawAtPoint: point withAttributes: attributes];;
  17. }