1
有沒有辦法阻止NSTextField中的一些鍵盤佈局(輸入源)。如何阻止NSTextField中的某些鍵盤佈局?
我需要阻止所有非羅馬語言(如俄語,白俄羅斯語,烏克蘭等),或者禁用所有語言,並且只啓用英語/德語。
如果它不會那麼難 - 請舉一些例子。
UPD:
我想我需要使用this
但如何? =)
有沒有辦法阻止NSTextField中的一些鍵盤佈局(輸入源)。如何阻止NSTextField中的某些鍵盤佈局?
我需要阻止所有非羅馬語言(如俄語,白俄羅斯語,烏克蘭等),或者禁用所有語言,並且只啓用英語/德語。
如果它不會那麼難 - 請舉一些例子。
UPD:
我想我需要使用this
但如何? =)
檢查只是連接的鍵盤可能有點flakey。例如,使用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