【问题标题】:Apple Emoji / iterate through NSStringApple Emoji / 遍历 NSString
【发布时间】:2012-04-06 13:32:05
【问题描述】:
我想遍历表情符号输入字符串的“字符”(来自 UITextField),然后一个接一个地用 UILabel 显示这些表情符号图标。
for (int i=0; i < len; i++) {
unichar c = [transformedString characterAtIndex:i];
[label setText:[NSString stringWithFormat:@"%C", c]];
...
这适用于 ASCII 文本,但不适用于 Emoji 字体(除了心形符号之外的所有字体都是空的)。正如我注意到的,单个表情符号图标由字符串中的 2 个字符表示。
据我所知,表情符号使用私人区域 unicode 字符。
有没有办法做到这一点?
非常感谢,你省了我一些头疼...
【问题讨论】:
标签:
objective-c
xcode
fonts
emoji
【解决方案1】:
您可以在 NSString 上使用 enumerate* 实例方法之一,带有选项 NSStringEnumerationByComposedCharacterSequences。
- (void)enumerateSubstringsInRange:(NSRange)range
options:(NSStringEnumerationOptions)opts
usingBlock:(void (^)(NSString *substring,
NSRange substringRange,
NSRange enclosingRange,
BOOL *stop))block
NSString 使用 UTF-16 将一些代码点表示为两个 16 位值。您还可以手动检查字符串中的这些“代理对”并手动组合它们,但您仍然只能获得代码点而不是字符。
[transformedString
enumerateSubstringsInRange:NSMakeRange(0,[transformedString length]
options:NSStringEnumerationByComposedCharacterSequences
usingBlock: ^(NSString *substring,NSRange,NSRange,BOOL *)
{
[label setText:substring];
}];