Objective c 取消选择NSTextField中的文本

Objective c 取消选择NSTextField中的文本,objective-c,macos,nstextfield,deselect,Objective C,Macos,Nstextfield,Deselect,在使用新应用程序时,我遇到了与reguards中描述的相同的问题,即取消选择输入到nstextfield的文本: 关于使用NSTextViews执行此操作,有很多问题,但我还没有找到一个适用于NSTextFields的有效答案 在我的项目中,我有一个包含文本字段的窗口,其中包含一个控制器类,该类也是文本字段的委托。我有一个用于文本字段的iAction,它在enter时发送,根据字段中的文本执行操作,以及: (void)controlTextDidChange:(NSNotification *)

在使用新应用程序时,我遇到了与reguards中描述的相同的问题,即取消选择输入到nstextfield的文本:

关于使用NSTextViews执行此操作,有很多问题,但我还没有找到一个适用于NSTextFields的有效答案

在我的项目中,我有一个包含文本字段的窗口,其中包含一个控制器类,该类也是文本字段的委托。我有一个用于文本字段的iAction,它在enter时发送,根据字段中的文本执行操作,以及:

(void)controlTextDidChange:(NSNotification *)note

它处理一些自定义的自动完成,如

我的问题在于,当我按enter键提交输入的文本时,字段中的字符串被完全选中,但我希望能够取消选择文本,并将插入点放在末尾,如第一个链接中所述

有很多地方我可以让它取消选择文本,但实际上取消选择是行不通的。我已尝试按照第一个链接中所述获取字段编辑器,我还尝试使用controlTextDidEndEditing:方法,因为我确实在上面的controlTextDidChange:方法中获取了字段编辑器:

- (void)controlTextDidEndEditing:(NSNotification *)note{

    NSTextView *textView = [[note userInfo] objectForKey:@"NSFieldEditor"];
    [textView setSelectedRange:NSMakeRange([[self.ParseField stringValue]length]-1, 0)
                      affinity:NSSelectionAffinityUpstream
                stillSelecting:NO];


}
我还尝试禁用并重新启用该字段上的编辑,但这也不起作用

对于我来说,像能够向文本字段发送一条moveDown:message这样简单的消息就行了,因为这与按下箭头相同,但文本字段无法识别该选择器。(我认为NSTextField是从NSResponder继承的,所以它会工作,但我想不会吧?)


感谢您在一个只有窗口和文本字段的简单应用程序中提供的帮助

我将文本字段设置为firstResponder

这将在应用程序运行时选中文本

如果我添加到ApplicationIDFinishLaunching中

NSRange tRange=[[文本字段当前编辑器]选择范围];
[[u theTextField currentEditor]setSelectedRange:NSMakeRange(tRange.length,0)]

现在,如果未选择“运行”文本,则插入点位于文本的末尾

我使用selectedRange获取选择字符长度。因为文本首先被选中,看起来更简单

- (void)awakeFromNib{
    [_theTextField setStringValue:@"100000"];

}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [[[NSApplication sharedApplication] mainWindow] makeFirstResponder:_theTextField];

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

}

我一直在寻找Swift 3中的解决方案,以下是对我有效的方法:

theTextField.currentEditor()?.selectedRange = NSMakeRange(0, 0)

也许您应该使用
[yourtextfieldbecomefirstresponder]将焦点设置为NSTextField(请参阅)@Sudo我刚刚删除了我的答案,在我意识到他们使用的是NSTextView而不是NSTextField@nintandrew您是否可以再次查看您的问题,因为您不清楚是否需要NSTextView或NSTextField的答案。我会为你恢复我的回答now@Sudo我不需要将文本字段注册为第一响应者,但遵循该链接中的建议和Markhunte的回答帮助我找到了一个答案answer@markhunte我在问有关NSTextField的事,谢谢你的帮助!这个答案最终让我找到了解决办法。最终,textfield不需要注册为第一响应者。取而代之的是,选择文本,然后使用currentEditor调整选择范围。我以前不知道currentEditor,我应该更多地研究NSControl而不是NSResponder。谢谢你的帮助!
theTextField.currentEditor()?.selectedRange = NSMakeRange(0, 0)