Ral*_*roo 8 objective-c special-characters nsstring uitextfield
我有一个UITextField用户将输入字符.它很简单,我怎样才能返回它的实际长度?当字符串包含AZ 1-9个字符时,它按预期工作,但任何表情符号或特殊字符都会被重复计算.
在它最简单的格式中,对于某些特殊字符(如表情符号),它只有2个字符的分配:
NSLog(@"Field '%@' contains %i chars", myTextBox.text, [myTextBox.text length] );
Run Code Online (Sandbox Code Playgroud)
我已经通过每个字符尝试使用循环characterAtIndex,substringFromIndex等,毫无进展.
根据下面的答案,用于计算字符的确切代码(希望这是正确的方法,但它的工作..):
NSString *sString = txtBox.text;
__block int length = 0;
[sString enumerateSubstringsInRange:NSMakeRange(0, [sString length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
length++;
}];
NSLog(@"Total: %u", length );
Run Code Online (Sandbox Code Playgroud)
hel*_*imi 12
在[myTextBox.text length]返回单字符的数量,而不是字符串的长度可见.é = e+´这是2个unichars.表情符号字符应包含更多1个unichar.
下面的示例枚举字符串中的每个字符块.这意味着如果你记录substringRange它的范围可以超过1.
__block NSInteger length = 0;
[string enumerateSubstringsInRange:range
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
length++;
}];
Run Code Online (Sandbox Code Playgroud)
您应该去观看2011年WWDC会议128 - 高级文本处理.他们解释了为什么会这样.真的很棒!
我希望这对任何帮助都有帮助.
干杯!
| 归档时间: |
|
| 查看次数: |
3719 次 |
| 最近记录: |