1

目前我正在使用这种方法

(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。

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

4

1 回答 1

0

我也遇到了这个问题,我找到了以下两种解决方案来解决这个问题尝试

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

或者

使用 NSNotificationCenter (来自UITextView 的 Text 属性上的 Key Value Observing Work 吗?

- (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...");
}
于 2013-05-16T17:50:19.817 回答