2012-02-07 7 views
6

Ho un'etichetta NSTextField e voglio che qualcosa accada quando un utente fa clic su di esso.Fare clic su Etichetta NSTextField per emulare il collegamento ipertestuale a una cartella

Pensavo di poter creare un IBAction e collegarlo all'etichetta ma non sembra accadere nulla.

Qualche suggerimento?

intenzioni:

Il motivo per cui sto facendo questo è perché voglio un'etichetta che è un collegamento a una cartella. Forse sto prendendo l'approccio sbagliato del tutto?

definizione IBAction nel mio PersonController.m

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

XIB File

Nel file XIB ho fatto un collegamento tra il Received ActionssurnameLabelSelected e l'etichetta di NSTextField StaticText.

risposta

11

Le etichette sono campi di testo non modificabili, pertanto non inviare azioni ai relativi target. Si desidera utilizzare un NSButton e disattivare il suo disegno di bordo e ridimensionarlo per adattarlo al meglio al suo testo per simulare un'etichetta.

+0

Buon consiglio! In definitiva, sto cercando di creare un campo di collegamento ipertestuale e ho pensato che avrei potuto modificare lo stile dell'etichetta per sembrare un collegamento ipertestuale. Il tuo suggerimento è ancora la giusta linea d'azione? – Coderama

+1

Sfortunatamente la creazione di un collegamento ipertestuale realistico in un campo di testo è un po 'più complicata rispetto all'impostazione di un attributo di collegamento. Ti consiglio di consultare [DSClickableURLTextField] (http://www.nightproductions.net/developer.htm#DSClickableURLTextField) come riferimento. –

+0

Questo non funziona abbastanza oggi. Gli NSButtons amano disegnare il proprio background e cambiare i loro colori a seconda del loro tipo. Non esiste un tipo di pulsante integrato e una combinazione di opzioni per eliminarlo. – Sean256

18

Hai un paio di opzioni. La risposta di Francis è un'opzione. Un'altra opzione è la sottoclasse di NSTextField e l'override di -mouseDown:. Qualcosa di simile (scritto fuori dalla parte superiore della mia testa, non testato):

@interface ClickableTextField : NSTextField 
@end 

@implementation ClickableTextField 

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

@end 

Se NSTextField è più vicino nello stile alla comparsa è necessario, questo potrebbe essere l'approccio migliore. Se hai bisogno delle funzionalità di NSButton (evidenzia al clic, ecc.) Vai con la soluzione di Francis.

+0

Ho effettivamente modificato DSClickableURLTextField menzionato sopra per attivare l'azione esattamente come suggerisci se non c'è nessun URL da aprire nell'area che l'utente ha fatto clic. Semplice cambiamento, grazie per l'idea. – SilverSideDown

+0

Funziona perfettamente, tranne forse per l'aggiornamento del cursore, ma è facile da aggirare –

2

Un'altra opzione è creare un pulsante trasparente (senza titolo/immagine/bordo, spinta momentanea) davanti all'etichetta, con lo stesso fotogramma di quello dell'etichetta. E imposta l'azione del pulsante di conseguenza.

Problemi correlati