macos - 如何阻止 NSTextField 中的某些键盘布局?

标签 macos cocoa

有没有办法阻止 NSTextField 中的某些键盘布局(输入源)。

我需要阻止所有非罗马语言,例如俄语、白俄罗斯语、乌克兰语等,或禁用所有语言并仅启用英语/德语。

如果不是那么难 - 请举一些例子。

更新:

我想我需要使用this

但是怎么办呢? =)

最佳答案

仅检查连接的键盘可能有点不稳定。例如,使用 Option 键,您可以从任何键盘输入大量非罗马字符。更不用说复制和粘贴了。

更好的方法是创建 NSFormatter 的子类并实现 isPartialStringValid:proposeSelectedRange: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:,但由于您输入的是字符串,他们可以直接传递输入字符串。

关于macos - 如何阻止 NSTextField 中的某些键盘布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11064760/

相关文章:

macos - $PATH 不更新

excel - ActiveSheet 与 WorkSheet

mac 上的 python-config ldflags

javascript - 在 mac osx 10.11 上的 MAMP 3.5 上运行 python 脚本

macos - NSTableView:当 float subview 被删除时收到通知

objective-c - 如何在另一个 NSView 下阻止 NSView 事件?

objective-c - 可编辑的透明 NSTextField 文本以白色高亮显示

Objective-C:从 NSString 生成 NSArray

objective-c - 设置声音输出/输入

objective-c - 如何使用绑定(bind)将模型通过 Controller 连接到 View ?