5

我有一个带有可编辑的 NSViewNSTextField和多个其他子视图,如 NSView、NSSlider、NSImage 等。

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

3 回答 3

9

假设您有一个名为 clickView1.h 的 NSView 子类。参考这篇文章,您可以通过以下方式实现您的第一目标。

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

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

于 2013-11-09T14:20:55.530 回答
3

对于问题 1,我同意 BlueTomato 的观点,即您需要做其他事情 first responder,而不是 call 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;
}
于 2013-11-09T17:08:39.797 回答
0

尝试以下方法:

 [[NSApp mainWindow] performSelector:@selector(resignFirstResponder:)
                          withObject:yourTextfield
                          afterDelay:0.0];
于 2013-11-09T15:42:37.517 回答