2012-05-05 5 views
8

사용자가 문자를 입력 할 UITextField입니다. 그것은 그것의 실제 길이를 어떻게 돌려 보낼 수 있을까요? 문자열에 A-Z 1-9 문자가 포함되어 있으면 예상대로 작동하지만 이모티콘이나 특수 문자는 두 번 계산됩니다. 그것에서NSString 길이 - 특수 문자

이는 이모티콘과 같은 몇 가지 특수 문자를 2 개 문자의 할당을 가지고, 간단한 형식이다 : 나는 등 characterAtIndex, substringFromIndex를 사용하여 각 문자를 통해 반복 시도하고 아무데도 없어 한

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

. 아래의 답변을 당으로

, 정확한 코드는 문자를 계산하는 데 사용 (이 올바른 접근 희망하지만, 그것을 작동합니다 ..) :

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

답변

12

[myTextBox.text length] 반환 unichars의 수와하지의 가시 길이를 끈. é = e+´ 2 unichars입니다. 그림 이모티콘에는 1 개의 unichar가 더 많이 포함되어야합니다.

아래의이 샘플은 문자열의 각 문자 블록을 열거합니다. 어떤 당신이 할 수있는 이상 당신은 가서 세션 128주의해야 1.

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

보다 substringRange의 범위를 로그인하면 의미 - WWDC 2011에서 고급 텍스트 처리합니다. 왜 그런지 설명합니다. 정말 대단해!

나는 이것이 어떤 도움이되기를 바랍니다.
건배!

+0

감사합니다 아주 아주 많이 특수 문자와 이모티콘으로 작동으로 아래의 옵션을 고려할 수 있습니다. 약간의 조정 후에 작동하도록했습니다! 위의 내용을 업데이트하고 답변으로 받아 들였습니다 (잘못했는지 알려주세요!). 그 비디오를 감시 목록에 추가하고, 내가 정말로 닦을 필요가있는 몇 가지 일이 있습니다. 다시 감사합니다. – Ralphonzo

+2

이 방법은 플래그와 같은 일부 이모티콘 문자에서는 작동하지 않습니다. 메서드는이 문자에 대해 2를 반환합니다. – Swordsfrog

+0

생명의 은인, 고마워! – beebcon

0

우리는 또한 솔루션

const char *cString = [myTextBox UTF8String]; 

int textLength = (int)strlen(cString); 

+0

죄송합니다. 이모티콘으로 작동하지 않습니다. – cornr