2012-06-16 4 views
1

NSTextField에서 일부 키보드 레이아웃 (입력 소스)을 차단하는 방법이 있습니까?NSTextField에서 일부 키보드 레이아웃을 차단하는 방법?

러시아어, 벨로루시 어, 우크라이나어 등의 모든 비 로마 언어를 차단하거나 모든 언어를 사용 중지하고 영어/독일어 만 사용하도록 설정해야합니다.

그렇게 힘들지 않으면 - 몇 가지 예를 들어주세요.

UPD : 나는 this

하지만 어떻게 사용할 필요가 있다고 생각

? =)

답변

0

첨부 된 키보드 만 확인하는 것은 약간 이상 할 수 있습니다. Option 키를 사용하여 예를 들어 키보드에서 많은 비 로마 문자를 입력 할 수 있습니다. 복사하여 붙여 넣는 것은 말할 것도 없습니다.

더 좋은 방법은 NSFormatter의 서브 클래스를 만들어 isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:

은 간단한 구현이이 같은이 될 수 구현하는 것입니다 :

- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error 
{ 
    NSString *partialString = *partialStringPtr; 

    NSCharacterSet *acceptedCharacters = [NSCharacterSet characterSetWithCharactersInString: @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]; 

    NSCharacterSet *notAcceptedCharacters = [acceptedCharacters invertedSet]; 


    BOOL needsCheck = YES; 
    BOOL didChange = NO; 

    do { 
     NSRange rng = [partialString rangeOfCharacterFromSet:notAcceptedCharacters]; 

     if (!NSEqualRanges(rng, NSMakeRange(NSNotFound, 0))) { 

      partialString = [partialString stringByReplacingCharactersInRange:rng withString:@""]; 

      didChange = YES; 
     } 
     else { 
      needsCheck = NO; 
     } 

    } while (needsCheck); 

    if (didChange) { 

     *partialStringPtr = partialString; 
     NSRange newRange = origSelRange; 
     newRange.length = 0; 
     *proposedSelRangePtr =newRange; 

     return NO; 
    } 

    return YES; 
} 

NSFormatter를 서브 클래 싱 할 때 당신은 또한 stringForObjectValue:getObjectValue:forString:errorDescription:를 구현해야합니다 ,하지만 문자열을 입력하기 때문에 입력 문자열을 바로 전달할 수 있습니다.

+0

너무 스마트하지 않아서 필요한 것을 해결할 수 있습니다 =) – Kira

관련 문제