NSTextField에서 일부 키보드 레이아웃 (입력 소스)을 차단하는 방법이 있습니까?NSTextField에서 일부 키보드 레이아웃을 차단하는 방법?
러시아어, 벨로루시 어, 우크라이나어 등의 모든 비 로마 언어를 차단하거나 모든 언어를 사용 중지하고 영어/독일어 만 사용하도록 설정해야합니다.
그렇게 힘들지 않으면 - 몇 가지 예를 들어주세요.
UPD : 나는 this
하지만 어떻게 사용할 필요가 있다고 생각
? =)
NSTextField에서 일부 키보드 레이아웃 (입력 소스)을 차단하는 방법이 있습니까?NSTextField에서 일부 키보드 레이아웃을 차단하는 방법?
러시아어, 벨로루시 어, 우크라이나어 등의 모든 비 로마 언어를 차단하거나 모든 언어를 사용 중지하고 영어/독일어 만 사용하도록 설정해야합니다.
그렇게 힘들지 않으면 - 몇 가지 예를 들어주세요.
UPD : 나는 this
하지만 어떻게 사용할 필요가 있다고 생각
? =)
첨부 된 키보드 만 확인하는 것은 약간 이상 할 수 있습니다. 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:
를 구현해야합니다 ,하지만 문자열을 입력하기 때문에 입력 문자열을 바로 전달할 수 있습니다.
너무 스마트하지 않아서 필요한 것을 해결할 수 있습니다 =) – Kira