2010-05-27 20 views

Respuesta

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

De Apple documentos: _Este método está destinado a ser invocado solo por el método resetCursorRects. Si se invoca de otra forma, el rectángulo del cursor resultante se descartará la próxima vez que se reconstruyan los rectángulos del cursor de la vista. Entonces debes subclase NSButton. – Kentzo

0

Haga que el botón agregue un cursor rect.

+3

cómo hago que –

+6

era necesaria la baja votación? Una búsqueda rápida de la documentación para "cursor rect" le dice mucho. –

+1

@JoshuaNozzi sí, ya que esto no es, en sí mismo, una respuesta útil. –

34

Primero debe subclase NSButton y luego agregue el código siguiente.

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

Ahora puede establecer el cursor como lo desee.

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

Nota: añadir cursor como una propiedad de la subclase, así:

@property (strong) NSCursor *cursor; 
+1

¿Podría ampliar un poco su respuesta? NSButton no tiene una variable de instancia de cursor? No entiendo tu respuesta. –

+0

Subclasificar todos y cada uno de los botones que tengo en la interfaz de usuario solo para aplicar un cursor flotante parece irracional. Después de decirle que no debe llamar a addCursorRect directamente, los documentos también le dicen que nunca llame "resetCursorRects" directamente, y solo llame a "invalidateCursorRects", que es un método NSWindow. –

+0

@MottiShneor Llamar a [super resetCursorRects] dentro de -resetCursorRects no infringe la regla "nunca llamar a esto" ya que en realidad no la está invocando cuando se suponía que de todos modos. –

Cuestiones relacionadas