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

swa*_*lla 11 macos cocoa objective-c nstextfield

当我的应用程序启动时,第一个NSTextField被选择如下:

在此输入图像描述

我可以编辑NSTextField,但是当我按Enter键结束编辑时,文本会再次被选中,编辑也不会结束.

我在这里遵循了Apple教程,并且我在文本字段中永远突出显示了同样的问题.

我怎么阻止这个?我想它所以文本字段不是应用程序的第一个响应者所以它不会立即编辑,当它被编辑时,单击文本字段外部将结束它.[[textField window]makeFirstResponder:nil]在后一种情况下,我不确定在哪里停止编辑.

我正在运行Yosemite 10.10.2.

She*_*mus 12

由于becomeFirstResponderin 的默认实现,您的文本字段正在选择文本NSTextField.

要防止选择,子类NSTextField和覆盖becomeFirstResponder以取消选择任何文本:

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

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

    return responderStatus;
}
Run Code Online (Sandbox Code Playgroud)

产生的行为是字段在获得焦点时不选择文本.

要使第一响应者无需任何操作,请makeFirstResponder:nil在应用程序完成启动后进行调用.我喜欢子类NSObject来定义doInitWithContentView:(NSView *)contentView,并从我的中调用它NSApplicationDelegate.在下面的代码中,_windowIBOutlet:

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

    [_menuController doInitWithContentView:_window.contentView];
}
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*bar 5

NSTextField我正在使用 IB,名为的属性Refuses First Responder。勾选该选项将阻止在窗口显示后立即突出显示文本字段。这个问题Refuses First Responder中有一些更详细的信息。