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