Ho un NSTableView
basato su visualizzazione. Ogni vista nella tabella ha un campo di testo personalizzato.mouseDown: in un NSTextField personalizzato all'interno di NSTableView
Vorrei attivare un'azione quando l'utente fa clic sul campo di testo (etichetta) all'interno della vista della tabella (immagina di avere un collegamento ipertestuale con un'azione personalizzata in ogni cella di tabella).
Ho creato una sottoclasse di base NSTextField
per catturare gli eventi del mouse. Tuttavia, attivano solo il secondo clic, non il primo clic.
Ho provato a utilizzare un NSButton
e questo si accende subito.
Ecco il codice per l'etichetta personalizzata:
@implementation HyperlinkTextField
- (void)mouseDown:(NSEvent *)theEvent {
NSLog(@"link mouse down");
}
- (void)mouseUp:(NSEvent *)theEvent {
NSLog(@"link mouse up");
}
- (BOOL)acceptsFirstResponder {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
return YES;
}
@end
Grazie, ci proverò. Una domanda: il primo clic funziona con un NSButton (la riga della tabella non è selezionata in quel caso). C'è un modo per emulare tale comportamento? – Mark
Probabilmente esiste, ma non lo so. Avrei pensato che restituire SÌ per acceptFirstMouse e/o acceptFirstResponder lo avrebbe fatto. – rdelmar
Se vuoi il comportamento che ottieni con un pulsante, perché non usare semplicemente un pulsante? È possibile disattivare il bordo e in ogni caso apparirebbe come un'etichetta senza bordi. Se si desidera un bordo, è possibile incorporare un pulsante senza bordi in una NSBox. – rdelmar