Domanda

Ho un nstableview che contiene la mia sottoclasse Nscell personalizzata, Iconcell.

L'iconcell contiene tre elementi: un'immagine, un testo e un pulsante.

Ecco una versione semplificata del mio codice di disegno (closeButton è il pulsante):

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    NSPoint cellPoint = cellFrame.origin;

    [controlView lockFocus];

    CGFloat buttonWidth = [closeButton frame].size.width;

    [someNSImage drawInRect:NSMakeRect(cellPoint.x, cellPoint.y, ICON_WIDTH, ICON_HEIGHT) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil];
    [someNSString drawInRect:NSMakeRect(cellPoint.x+ICON_WIDTH+PADDING, cellPoint.y, cellFrame.size.width - ICON_WIDTH - buttonWidth, cellFrame.size.height) withAttributes:someTextAttributes];
    [(NSButtonCell*)[closeButton cell] drawWithFrame:NSMakeRect(cellPoint.x + cellFrame.size.width - buttonWidth, cellPoint.y, buttonWidth, cellFrame.size.height) inView:controlView];

    [controlView unlockFocus];
}

La parte del disegno funziona bene e produce qualcosa di simile:

cell screenshot

che è quello che voglio.

Inoltre, voglio che una delle due cose accada quando l'utente interagisce con la cella: se l'utente fa clic sulla cella, tranne il pulsante di chiusura, dovrebbe fare actionA. Se l'utente fa clic sul pulsante Chiudi, dovrebbe farlo actionB.

Il problema che sto riscontrando è che il pulsante di chiusura sembra "invisibile" - se faccio clic su di esso, non si muove (mentre un pulsante di lavoro dovrebbe mostrare il suo stato spinto verso il basso), e in generale si comporta come se non lo fosse lì, e actionA viene attivato invece di actionB.

Ecco come ho impostato le due azioni:

[tableView setAction:@selector(actionA)];

e

[closeButton setAction:@selector(actionB)];

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Stai solo disegnando un'immagine del pulsante nella cella. Questa non è la stessa cosa del posizionare il pulsante reale nella cella.

Le celle non sono viste complete, quindi questo è più complicato di quanto si possa pensare all'inizio. Se devi davvero farlo con le cellule, è spiegato qui: NSButtonCell all'interno di Nescell personalizzato.

Ma ... se riesci a limitarti a 10.7+, hanno aggiunto viste di tabelle basate sulla vista. Questi sono molto più semplici, dal momento che puoi mettere un pieno NSButton dentro il tuo NSTableViewCellView. Questo è spiegato nel Guida alla programmazione della visualizzazione della tabella. Altamente raccomandato se puoi limitarti a 10.7+.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top