如何在NSString中删除一个表情符号

ael*_*lam 5 ios

如何在NSString中遍历表情符号有一个NSString方法用于遍历NSString的子字符串

    NSString *text = @"2012?? ";
    [text enumerateSubstringsInRange:NSMakeRange(0, [text length]) options:NSStringEnumerationByComposedCharacterSequences  usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    printf("%s- ",[substring UTF8String]);
}];
Run Code Online (Sandbox Code Playgroud)

猜猜输出是什么?

输出是:

    2- 0- 1- 2- - ?- ?-  - - - - - - - - - - - -  - - 
Run Code Online (Sandbox Code Playgroud)

而不是:

   2- 0- 1- 2- - ?- ?-  - - - - - - - - - - 
Run Code Online (Sandbox Code Playgroud)

像美国国旗一样,它由和组成.标志的长度似乎是4,它们由两个长度为2的组成字符组成.虽然列举了NSString,但它给了我而不是

当字符串在UITextView中时,键盘中的BACKSPACE被点击,它可以处理删除表情符号而不是.

在我的应用程序中,我制作了一个自定义表情符号键盘,并有一个DELETE按钮.我想DELETE按钮就像键盘中的系统BACKSPACE按钮一样工作.

有谁知道如何处理它?

Elf*_*dae 15

要删除UITextView中的最后一个字符,只需调用即可 -deleteBackward

- (void)deleteButtonPressed:(id)sender
  {
     [self.textView deleteBackward];
  }
Run Code Online (Sandbox Code Playgroud)


Jes*_*sak 2

我不是 unicode 专家,但我相信这里的问题是标志实际上是两个字符。它们是区域指示符号。例如,美国国旗是两个不同的字符:REGIONAL INDICATOR SYMBOL LETTER UREGIONAL INDICATOR SYMBOL LETTER S

http://en.wikipedia.org/wiki/Regional_Indicator_Symbol

您可能会幸运地要求文本输入系统为您进行标记化,因为它似乎理解(例如在删除时)它们应该被视为一个单元。尝试使用该UITextInputTokenizer方法positionFromPosition:toBoundary:inDirection:从字符串末尾移动到前一个字符(即 pass UITextGranularityCharacter)。您可以从 UITextView 或 UITextArea 的tokenizer方法获取标记生成器。

希望有帮助!