如何让我的 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.
由于 NSTextField
中 becomeFirstResponder
的默认实现,您的文本字段正在 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;
就是这样!这样做,它就不会突出显示字段中的文本。
当我的应用程序启动时,第一个 NSTextField 是这样选择的:
我可以很好地编辑 NSTextField,但是当我按回车键结束编辑时,文本又变成了选中状态,编辑并没有结束。
我遵循了 Apple 教程 here,我遇到了同样的问题,文本字段一直被高亮显示。
我该如何阻止它?我希望它这样文本字段不是应用程序的第一响应者,因此不会立即对其进行编辑,并且在编辑时单击文本字段外部将结束它。在后一种情况下,我不确定将 [[textField window]makeFirstResponder:nil]
放在哪里以停止编辑。
我是 运行 Yosemite 10.10.2.
由于 NSTextField
中 becomeFirstResponder
的默认实现,您的文本字段正在 selecting 文本。
To prevent selection, subclass
NSTextField
, and overridebecomeFirstResponder
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 subclassNSObject
to definedoInitWithContentView:(NSView *)contentView
, and call it from myNSApplicationDelegate
. In the code below,_window
is anIBOutlet
:
- (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;
就是这样!这样做,它就不会突出显示字段中的文本。