8

UITextFieldユーザーが文字を入力する があります。実際の長さを返すにはどうすればよいですか?文字列に AZ 1 ~ 9 文字が含まれている場合、期待どおりに機能しますが、絵文字や特殊文字は二重にカウントされます。

最も単純な形式では、絵文字などの特殊文字に 2 文字が割り当てられています。

NSLog(@"Field '%@' contains %i chars", myTextBox.text, [myTextBox.text length] );

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 );
4

2 に答える 2

12

[myTextBox.text length]は、文字列の表示可能な長さではなく、ユニチャーの数を返します。é = e+´これは2ユニチャーです。絵文字には、1つ以上のユニチャーが含まれている必要があります。

以下のこのサンプルは、文字列内の各文字ブロックを列挙しています。つまり、ログに記録すると、その範囲がsubstringRange1より長くなる可能性があります。

__block NSInteger length = 0;
[string enumerateSubstringsInRange:range
                           options:NSStringEnumerationByComposedCharacterSequences
                        usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    length++;
}];

セッション128-2011WWDCからの高度なテキスト処理をご覧ください。彼らはそれがそのような理由を説明します。本当に素晴らしいです!

これがお役に立てば幸いです。
乾杯!

于 2012-05-05T13:17:12.327 に答える
0

以下のオプションを解決策として検討することもできます

const char *cString = [myTextBox UTF8String];

int textLength = (int)strlen(cString);

これは特殊文字と絵文字で機能します

于 2016-04-04T01:42:13.623 に答える