目前我正在使用这种方法
(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.
如何修复用户界面中的错误号码? 我错过了什么?
答案 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...");
}