4

絵文字入力文字列 (UITextField から) の「文字」を繰り返し処理し、それらの絵文字アイコンを UILabel で次々に表示したいと考えています。

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

これは ASCII テキストでは機能しますが、絵文字フォントでは機能しません (ハート記号以外はすべて空です)。お気づきのように、1 つの絵文字アイコンは文字列内の 2 文字で表されます。私の知る限り、絵文字はプライベート エリアの Unicode 文字を使用します。

とにかくこれを達成する方法はありますか?

ありがとうございます。

4

1 に答える 1

8

オプションを指定して、NSString の enumerate* インスタンス メソッドの 1 つを使用できますNSStringEnumerationByComposedCharacterSequences

- (void)enumerateSubstringsInRange:(NSRange)range
                           options:(NSStringEnumerationOptions)opts
                        usingBlock:(void (^)(NSString *substring,
                                             NSRange substringRange,
                                             NSRange enclosingRange,
                                             BOOL *stop))block

NSString は、いくつかのコードポイントを 2 つの 16 ビット値として表す UTF-16 を使用します。文字列内のこれらの「サロゲート ペア」を手動でチェックして手動で結合することもできますが、それでも文字ではなくコードポイントしか取得できません。


[transformedString
    enumerateSubstringsInRange:NSMakeRange(0,[transformedString length]
                       options:NSStringEnumerationByComposedCharacterSequences
                    usingBlock: ^(NSString *substring,NSRange,NSRange,BOOL *)
{
    [label setText:substring];
}];
于 2012-04-06T17:17:31.163 に答える