2010-11-18 10 views
6

Mi chiedo come sia possibile eliminare i contorni blu che Cocoa disegna intorno alle righe in NSTableView/NSOutlineView facendo clic con il pulsante destro del mouse su di essi.NSTableView: contorno blu su righe con clic con il pulsante destro

NSTableView Outline http://tobidobi.com/nstableview_outline.png

Non sembra essere un "punto culminante" classico, né un "anello di fuoco", se non mi sbaglio - così, di cosa si tratta, in realtà?

Attualmente sto disegnando NSCells personalizzati completamente me stesso - ma non riesco a capire come sia
* disegnare questo quadro da solo, anche, o
* sbarazzarsi di esso, o
* almeno cambia colore

Eventuali suggerimenti sono ben accetti! Grazie!

risposta

12

Sfortunatamente non sono a conoscenza di alcun modo documentato per eseguire questa operazione, a meno di scrivere la sostituzione della vista tabella.

Il metodo per ignorare è:

- (void)drawContextMenuHighlightForRow:(NSInteger)row; 

Si prega di presentare una richiesta di miglioramento con Apple in modo da non dover fare affidamento su metodi non documentati a fare ciò che si desidera in futuro. Sembra che gli altri due metodi di evidenziazione della tabella siano stati resi personalizzabili in 10.6 ma questo non lo era. Ho sempre pensato che fosse un po 'goffo, ma è necessario indicare a quale riga del menu fa riferimento (non necessariamente la stessa riga evidenziata).

+0

Che ha fatto il trucco! Grazie, Nicholas! – Tobidobi

+0

Il parametro type è sbagliato !! Non funzionerà correttamente a 64-bit. –

+0

Grazie, non stavo facendo Cocoa 64-bit per un po 'di tempo. –

1

mio NSTableView * mainTableView non è sub-classificati così mi sono liberato di esso poco prima che il menù contestuale si apre:

- (void)menuWillOpen:(NSMenu *)menu{ 
    NSInteger rightClicked = [mainTableView clickedRow]; 
    [mainTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:rightClicked] byExtendingSelection:NO]; 
    [mainTableView deselectRow: rightClicked]; 
    [mainTableView reloadData]; 
    { 
+0

reloadData non è necessario, ma questa è la strada da percorrere. –

Problemi correlati