UITextField - 带表情符号的最大字符长度

时间:2013-04-23 13:00:01

标签: ios objective-c uitextfield

目前我正在使用这种方法

(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
     NSUInteger newLength = [textField.text length] + [string length] - range.length;
     if(newLength <= 25) {
         self.charsLeft.text = [NSString stringWithFormat:@"%d", 25 - newLength];
     }
     return (newLength > 25) ? NO : YES;
}

其中charsLeft是用户界面中显示的标签。

问题出现在emoji。如果用户输入emoji符号然后将其删除,则newLength将等于1.因此用户将看到他只剩下24个字符。

我知道表情符号符号是代理对,但我不明白为什么删除它而不是

中的range.length
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

将等于1而不是2.

如何修复用户界面中的错误号码? 我错过了什么?

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题,我在下面找到了解决这个问题的两个解决方案 试试

- (void)textViewDidChange:(UITextView *)textView
{
    numberWordLabel.text = [NSString stringWithFormat:@"%d/25",textView.text.length];
}

使用NSNotificationCenter(来自Does Key Value Observing Work on UITextView's Text Property?

- (id)init
{
    [super init];
    if (self)
    {
        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
        [nc addObserver:self 
               selector:@selector(textDidChange:) 
                   name:UITextViewTextDidChangeNotification
                 object:nil];
    }
    return self;
}

- (void)dealloc 
{
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc removeObserver:self];
}

- (void)textDidChange:(NSNotification *)note
{
    NSLog(@"Observation...");
}