Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to resign focus on NSTextField when clicking outside

I've a NSView with a editable NSTextField and multiple other subviews like NSView, NSSlider, NSImage etc.

  1. After I've entered my text into the editable NSTextField and click on any of the other views, move the slider etc. I would like my NSTextField to lose focus. I've tried calling the resignFirstResponder, but that does not seems to work. How can I do this?
  2. When I mark the text inside my NSTextField a blue background behind the text is shown. How can I change the color is this?
like image 444
dhrm Avatar asked Nov 09 '13 13:11

dhrm


2 Answers

Suppose that you have a subclass of NSView called clickView1.h. In reference to this post, you can achieve your goal in No. 1 as follows.

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

As for No. 2, I don't understand the question.

like image 112
El Tomato Avatar answered Nov 13 '22 12:11

El Tomato


For question 1, I agree with BlueTomato that you need to make something else first responder, not call resignFirstResponder. For question 2, subclass NSTextFieldCell, and in the subclass, have an override like this:

- (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;
}
like image 32
JWWalker Avatar answered Nov 13 '22 14:11

JWWalker