Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Click on NSTextField Label to emulate hyperlink to a folder

I have an NSTextField label and I want something to happen when a user clicks on it.

I thought I could create an IBAction and link this to the label but nothing seems to happen.

Any suggestions?

Intentions:

The reason why I am doing this is because I want a label that is a hyperlink to a folder. Perhaps I am taking the wrong approach altogether?

IBAction definition in my PersonController.m

- (IBAction)surnameLabelSelected:(id)sender {
    NSLog(@"This should do something!");
}

XIB File

In the XIB file I have made a Received Actions connection between surnameLabelSelected and the StaticText NSTextField label.

like image 665
Coderama Avatar asked Feb 07 '12 21:02

Coderama


3 Answers

You've got a couple options. Francis's answer is one option. Another option is to subclass NSTextField and override -mouseDown:. Something like this (written off the top of my head, not tested):

@interface ClickableTextField : NSTextField
@end

@implementation ClickableTextField

- (void)mouseDown:(NSEvent *)theEvent
{
    [self sendAction:[self action] to:[self target]];
}

@end

If NSTextField is closer in style to the appearance you need, this might be the better approach. If you need NSButton's features (highlight upon click, etc) go with Francis's solution.

like image 88
Andrew Madsen Avatar answered Dec 07 '22 04:12

Andrew Madsen


Labels are non-editable text fields thus don't send actions to their targets. You want to use an NSButton and turn off its border-drawing and size it to fit its text as best as possible to simulate a label.

like image 20
Francis McGrew Avatar answered Dec 07 '22 04:12

Francis McGrew


Another option is to create a transparent button (without title/image/border, momentary push in) in front of the label, with the same frame as label's. And set button's action accordingly.

like image 37
Borzh Avatar answered Dec 07 '22 04:12

Borzh