如何让我的 NSTextField 在应用程序启动时不突出显示其文本?

How can I make my NSTextField NOT highlight its text when the application starts?

当我的应用程序启动时,第一个 NSTextField 是这样选择的:

我可以很好地编辑 NSTextField,但是当我按回车键结束编辑时,文本又变成了选中状态,编辑并没有结束。

我遵循了 Apple 教程 here,我遇到了同样的问题,文本字段一直被高亮显示。

我该如何阻止它?我希望它这样文本字段不是应用程序的第一响应者,因此不会立即对其进行编辑,并且在编辑时单击文本字段外部将结束它。在后一种情况下,我不确定将 [[textField window]makeFirstResponder:nil] 放在哪里以停止编辑。

我是 运行 Yosemite 10.10.2.

由于 NSTextFieldbecomeFirstResponder 的默认实现,您的文本字段正在 selecting 文本。

To prevent selection, subclass NSTextField, and override becomeFirstResponder to deselect any text:

- (BOOL) becomeFirstResponder
{
    BOOL responderStatus = [super becomeFirstResponder];

    NSRange selectionRange = [[self  currentEditor] selectedRange];
    [[self currentEditor] setSelectedRange:NSMakeRange(selectionRange.length,0)];

    return responderStatus;
}

结果是该字段在获得焦点时 select 文本。

To make nothing the first responder, call makeFirstResponder:nil after your application finishes launching. I like to subclass NSObject to define doInitWithContentView:(NSView *)contentView, and call it from my NSApplicationDelegate. In the code below, _window is an IBOutlet:

- (void) applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application

    [_menuController doInitWithContentView:_window.contentView];
}

应用程序启动时您的字段获得焦点的原因是 window 自动将焦点赋予第一个控件。它通过从左到右、自上而下扫描来确定首先考虑什么(它首先从左到右扫描,因为放置在右上角的文本字段仍然会获得焦点)。 需要注意的是,如果 window 是 restorable,并且您从 Xcode 中终止应用程序,那么上次聚焦的任何字段都将保留上次聚焦的状态执行.

我正在使用 IB,NSTextField 上有一个名为 Refuses First Responder 的 属性。勾选将阻止在 window 出现后立即突出显示文本字段。 this question.

中有一些关于 Refuses First Responder 的更详细信息

无需继承。只需设置 refusesFirstResponder = YES;

NSTextField *textField = [NSTextField new];
textField.refusesFirstResponder = YES;

就是这样!这样做,它就不会突出显示字段中的文本。