如何在外部单击时将注意力集中在NSTextField上

时间:2013-11-09 13:26:27

标签: objective-c cocoa nstextfield

我有一个带有可编辑NSTextField的NSView以及NSView,NSSlider,NSImage等多个其他子视图。

  1. 在我将文本输入可编辑的 NSTextField 并单击任何其他视图后,移动滑块等。我希望我的NSTextField失去焦点。我试过调用resignFirstResponder,但这似乎不起作用。我怎么能这样做?
  2. 当我在 NSTextField 中标记文本时,会显示文本后面的蓝色背景。我该如何更改颜色?

3 个答案:

答案 0 :(得分:9)

假设您有一个名为clickView1.h的NSView子类。参考this post,您可以按照以下方式在第1号中实现目标。

- (void)mouseDown:(NSEvent *)event{
    AppDelegate *appDelegate = (AppDelegate *)[NSApp delegate];
    [appDelegate.window makeFirstResponder:nil];
}

至于第2号,我不明白这个问题。

答案 1 :(得分:3)

对于问题1,我同意BlueTomato您需要做出其他第一响应者,而不是致电resignFirstResponder。对于问题2,子类NSTextFieldCell,在子类中,有一个像这样的覆盖:

- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj
{
    [super setUpFieldEditorAttributes: textObj];

    if ([textObj isKindOfClass: [NSTextView class]])
    {
        NSTextView* textView = (NSTextView*) textObj;

        [textView setSelectedTextAttributes:
            [NSDictionary dictionaryWithObjectsAndKeys:
                [NSColor redColor],
                NSBackgroundColorAttributeName,
                nil] ];
    }

    return textObj;
}

答案 2 :(得分:0)

尝试以下方法:

 [[NSApp mainWindow] performSelector:@selector(resignFirstResponder:)
                          withObject:yourTextfield
                          afterDelay:0.0];