2012-04-06 2 views
4

Я хочу повторить «символы» входной строки Emoji String (из UITextField), а затем, один за другим, отобразить эти значки emoji с помощью UILabel.Apple Emoji/iterate через NSString

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

Это работает для ASCII текст, но не Emoji шрифты (все, кроме символа сердца пусты). Как я заметил, один символ Эмодзи представлен двумя символами в строке. Насколько я знаю, Emoji использует частные юникодные символы.

Есть ли в любом случае для достижения этой цели?

Большое спасибо, вы экономите мне головную боль ...

+0

Проверьте мой вопрос, похожий на вашу проблему: http://stackoverflow.com/questions/4615506/composing-unicode-char-format-for-nsstring – Eimantas

ответ

8

Вы можете использоваться один из Перечислим * методы экземпляра на NSString, с возможностью 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]; 
}]; 
+0

эй человек, который сделал трюк! Большое спасибо.. – Patrick

Смежные вопросы