Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw focus ring around NSBox on focus of child NSTextView in objective-c

I have one NSTextView within NSBox. I want to draw focus ring aroung NSBox whenever NSTextView got focus and remove focus ring as soon as NSTextView lost focus.

Thanks,

like image 565
AmitSri Avatar asked Jun 27 '11 12:06

AmitSri


1 Answers

To do this, create a subclass of NSTextView, and override the -becomeFirstResponder like so:

- (BOOL)becomeFirstResponder
{
    BOOL returnValue = [super becomeFirstResponder];
    if (returnValue) {
        //do something here when this becomes first responder
    }

    return returnValue;
}

You can set up an NSNotification in the if statement above so that when that code block gets run, your view containing the NSBox can get called and subsequently draw a focus ring on the NSBox. To handle the NSTextView losing focus, you'll want to override -resignFirstResponder, like so:

- (BOOL)resignFirstResponder
{
    BOOL returnValue = [super resignFirstResponder];
    if(returnValue){
        //do something when resigns first responder

    }
    return returnValue;
}

Be sure to change the class in interface builder, and change your class type in your header and/or implementation files to your new subclass of NSTextView:

enter image description here

like image 160
coryb Avatar answered Nov 13 '22 09:11

coryb