取消选择NSTextField中的文本

时间:2015-02-21 18:10:51

标签: objective-c macos nstextfield deselect

在处理新应用时,我遇到了在此处描述的相同问题,取消选择输入到nstextfield的文本:http://www.cocoabuilder.com/archive/cocoa/195313-nstextfield-how-to-deselect-text.html

关于使用NSTextViews进行此操作有很多问题,但我还没有找到NSTextFields的工作答案。

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

(void)controlTextDidChange:(NSNotification *)note

(BOOL)control:(NSControl *)control
       textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector 

处理一些自定义自动填充,如Suppressing the text completion dropdown for an NSTextField

的答案

我的问题在于,当我按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:消息这样简单的事情对我有用,因为它与点击向下箭头相同,但是文本字段不能识别选择。 (我认为NSTextField继承自NSResponder,所以它会起作用,但我猜不是吗?)

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

在一个只有窗口和文本字段的简单应用程序中。

我将textField设置为firstResponder。

这会在应用运行时选择文本。

enter image description here

如果我添加 applicationDidFinishLaunching

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

现在运行时,未选择文本,插入点位于文本的末尾。

enter image description here

我使用 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)];

}

答案 1 :(得分:4)

我一直在寻找Swift 3中的解决方案,所以这对我有用:

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