2013-04-23 101 views
1

最大字符长度目前我使用这种方法的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个字符。

我确实知道,表情符号是代理对的,但我不明白为什么如果你在

(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

删除比range.length将等于1,而不是2

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

回答

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..."); 
} 
+0

谢谢。第二个解决方案就是我一直在寻找的。 'UITextFieldDelegate'没有'didChange'方法,所以第一次修复不适合我。我仍然认为这个问题是SDK中的bug) – thoughtf00l 2013-05-21 14:16:28