2012-03-25 16 views
1

Ich habe eine grundlegende Cocoa-App mit einem benutzerdefinierten NSTextField, die einen Hyperlink emuliert.Benutzerdefinierte NSCursor ist nach dem Ändern in ein anderes Fenster verloren

Ich verwende den folgenden Code, um den benutzerdefinierten Cursor im Textfeld Implementierung zu setzen:

- (void) resetCursorRects { 
    [self addCursorRect: self.bounds cursor: [NSCursor pointingHandCursor]]; 
} 

Ich überschrieb auch mouseUp: und eine Aktion ausführen, wenn das Etikett angeklickt wird. In meinem Fall öffne ich eine URL über NSWorkspace.

Das Problem: Beim Öffnen des Browsers wird der "Zeigezeiger" auf den normalen Pfeilcursor zurückgesetzt (da das oberste Fenster jetzt Safari ist). Wenn ich jedoch zu meiner App zurückkehre und den Mauszeiger über meine benutzerdefinierte Hyperlink-Beschriftung bewege, ändert sich der Cursor nicht zur "Zeigehand".

Erst wenn ich die Größe des Fensters ändere (und die Cursor-Rezetze werden zurückgesetzt), arbeitet der Cursor wieder.

Ich versuchte, die Cursor-Rect im mouseUp: Aufruf ungültig zu machen, aber das hat nicht funktioniert.

Antwort

0

Bitte fügen Sie vor dem Hinzufügen des Cursors eine Reset-Zeile hinzu, obwohl dies beim direkten Aufruf des Dokuments nicht empfohlen wird. Oder Sie können das Fenster bitten, es zu tun.

[self resetCursorRects]; 
... 
[fatherWindow invalidateCursorRectsForView:self]; 
... 
[self addCursorRect:[self bounds] cursor:[NSCursor pointingHandCursor]]; 

Die Folgecode auf einer unserer Apps verwendet und es funktioniert sehr gut:

- (void) resetCursorRects 
{ 
    [super resetCursorRects]; 
    [self addCursorRect: [self bounds] cursor: [NSCursor  openHandCursor]]; 
}