4

我想遍历表情符号输入字符串(来自 UITextField)的“字符”,然后一个接一个地用 UILabel 显示这些表情符号图标。

for (int i=0; i < len; i++) {  
    unichar c = [transformedString characterAtIndex:i];  
    [label setText:[NSString stringWithFormat:@"%C", c]];  
...

这适用于 ASCII 文本,但不适用于 Emoji 字体(除了心形符号之外的所有字体都是空的)。正如我注意到的,单个表情符号图标由字符串中的 2 个字符表示。据我所知,表情符号使用私人区域 unicode 字符。

有没有办法做到这一点?

非常感谢,你省了我一些头疼...

4

1 回答 1

8

您可以使用 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];
}];
于 2012-04-06T17:17:31.163 回答