2014-11-08 19 views
7

Ho un NSTableView che mostra alcune immagini e un testo in ogni riga. Ho attivato più selezioni per NSTableView. E ho abilitato Drag & Drop per TableView per ordinare o esportare le immagini. Ora accade che, quando seleziono più di una riga e trascinandole sopra il TableView, l'intera riga diventa blu e rimane blu (selezionata). Testo e immagini non possono essere visti. In XCode ottengo questo messaggio:NSTableView Trascina e rilascia le righe selezionate sovrascrive il layout delle righe in blu

Il layout deve essere aggiornato dopo la chiamata - [layout NSTableRowView]. NSTableRowView o una delle sue superclassi possono avere sovrascritto -layout senza chiamare super. Oppure, qualcosa potrebbe avere un layout sporco nel mezzo dell'aggiornamento. Entrambi sono errori di programmazione in Cocoa Autolayout. Il primo è abbastanza probabile che sorga se alcune classi di Autolayout pre-Cocoa avessero un metodo chiamato layout, ma dovrebbe essere corretto.

Il problema esiste solo per selezione multipla. Quando si attiva la selezione singola, funziona correttamente.

Qui ci sono tre immagini per illustrare il problema:

Immagine 2: Quando si trascina su di esso si completa blu; ignorando gli altri componenti di layout

http://ekiwi.de/temp/stackoverflow/original2.png

Immagine 3: Dopo trascinandolo rimane pienamente blu

http://ekiwi.de/temp/stackoverflow/original3.png

Fino ad ora non ho trovato alcuna soluzione o suggerimento da googling due giorni. Forse qui qualcuno ha un suggerimento?

+1

Sei arrivato da qualche parte con questo? Ho un problema simile con NSOutlineView. Nel mio caso, posso aggirare il problema cambiando lo stile di evidenziazione sull'elenco di fonti. L'ho anche ricreato in un progetto di test estremamente semplice, quindi sospetto che si tratti di un bug di Apple e abbia archiviato un radar. –

+2

Ho anche incontrato questo bug nella mia app, che utilizza un NSOutlineView basato sulla vista. L'unico ulteriore bit di informazioni che posso aggiungere è che, almeno per la mia app, questo bug si verifica solo su Yosemite e non su Mavericks. Gavin, se hai ancora quel progetto di test in giro dal tuo radar, ti dispiacerebbe postare una copia da qualche parte? –

+0

qualche soluzione per questo? – SpaceDog

risposta

1

Sono stato finalmente in grado di ignorare il colore di selezione blu impostando selectionHighlightStyle della vista di riga. Il seguente codice nella sottoclasse NSTableRowView ha fatto il trucco:

- (NSTableViewSelectionHighlightStyle)selectionHighlightStyle 
{ 
    return NSTableViewSelectionHighlightStyleNone; 
} 

- (void)drawSelectionInRect:(NSRect)dirtyRect 
{ 
    [[NSColor redColor] set]; 
    NSRectFill(dirtyRect); 
} 
Problemi correlati