2013-02-22 10 views
6

Vorrei verificare se il mio NSButton personalizzato è attualmente premuto (l'utente fa clic su di esso) nel mio metodo drawRect personalizzato. Qualcosa del genere:Verifica se NSButton non funziona su drawRect

- (void)drawRect:(NSRect)dirtyRect{ 
    if ([self buttonIsInPressedState]) { 
     [[self alternateBGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    }else{ 
     [[self BGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    } 
    [super drawRect:dirtyRect]; 
} 

Come controllate una cosa del genere? È possibile?

SOLUZIONE

ho finito per il controllo delle mouseDownFlags sulla cella pulsanti. Non so se è il modo "giusto" per farlo, per cui vorrei sapere se avete un suggerimento migliore:

- (void)drawRect:(NSRect)dirtyRect{   
    if ([self.cell mouseDownFlags] == 0) { 
     [[self BGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    }else{ 
     [[self alternateBGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    } 

    [super drawRect:dirtyRect]; 
} 

risposta

2

Ho finito per controllare il mouseDownFlags sulla cella dei pulsanti. Non so se è il modo "giusto" per farlo, quindi fammi sapere se hai un suggerimento migliore. La soluzione è aggiornata nella domanda di cui sopra.

4

non credo "drawRect:" è il luogo giusto per cercare di catturare questo .

È possibile creare sottoclasse NSButton e quindi eseguire l'override di mouseDown: o setState: (cercando "NSOnState", che indica che il pulsante è selezionato o premuto).

+0

Ho provato self.state, ma funziona solo se il pulsante è "On" o "Off"! Quindi il pulsante è "On", una volta premuto e rilasciato. Voglio controllare se l'uso è ATTUALMENTE premendo. MouseDown è anche un'opzione, ma non riesco a far funzionare mouseUp per qualche motivo. –

0
if([pBtn state]==NSOnState){ 
    NSLog(@" button Pressed ") 
}else{ 
    NSLog(@" button not pressed "); 

} 
+0

Ho provato self.state, ma funziona solo se il pulsante è "On" o "Off"! Quindi il pulsante è "On", una volta premuto e rilasciato. Voglio controllare se l'uso è ATTUALMENTE premendo. –

+0

Puoi usare il pulsante, è fondamentalmente un pulsante di attivazione, forse puoi ottenere quello che vuoi ottenere .. – Amitg2k12

+0

Ho provato. Non funziona Ho finito per fare quanto sopra. Fammi sapere se hai una soluzione migliore. –

5

Ho risolto questo problema controllando [self isHighlighted].

+0

Sei un angelo – maxisme

+1

stavo per arrabbiarmi molto con la vita – maxisme