2010-05-27 11 views

risposta

17
[yourButton addCursorRect:[yourButton bounds] cursor:[theCursorYouWant]]; 
+14

Da documenti Apple: _Questo metodo deve essere richiamato solo dal metodo resetCursorRects. Se invocato in un altro modo, il rettangolo del cursore risultante verrà eliminato la volta successiva che i rettangoli del cursore della vista verranno ricostruiti_. Quindi devi sottoclasse NSButton. – Kentzo

0

Fare in modo che il pulsante aggiunga un cursore rect.

+3

come faccio che –

+6

era il down-voto necessario? Una rapida ricerca della documentazione per "cursore retto" ti dice molto. –

+1

@JoshuaNozzi si, poiché questo non è, in sé e per sé, una risposta utile. –

34

È necessario innanzitutto sottoclasse NSButton, quindi aggiungere il codice seguente.

- (void)resetCursorRects 
{ 
    if (self.cursor) { 
     [self addCursorRect:[self bounds] cursor: self.cursor]; 
    } else { 
     [super resetCursorRects]; 
    } 
} 

Ora è possibile impostare il cursore come desiderato.

[self.button setCursor:[NSCursor pointingHandCursor]]; 

Nota: aggiungi cursor come una proprietà della sottoclasse, in questo modo:

@property (strong) NSCursor *cursor; 
+1

Potresti ampliare un po 'la tua risposta. NSButton non ha una variabile di istanza del cursore? Non capisco la tua risposta. –

+0

La sottoclasse di ogni singolo pulsante che ho nell'interfaccia utente solo per applicare un cursore in movimento sembra irragionevole. Dopo averti detto che non dovresti chiamare direttamente addCursorRect, i documenti ti dicono anche di non chiamare mai "resetCursorRects" e di chiamare "invalidateCursorRects", che è un metodo NSWindow. –

+0

@MottiShneor Chiamare [super resetCursorRects] all'interno diresetCursorRects non viola la regola "never call this", in quanto in realtà non lo si sta invocando. –

Problemi correlati