2012-07-02 30 views
7

Fare imlecimin süresi boyunca kalmak için imleci neden alamıyorum? Sürüklemeye başladığım anda "Ok" a geçilir (lansmandan sonra uygulama temsilcisinde açık el olarak ayarladığım halde).NSCursor her zaman için sıfırlanır.

- (void)mouseDown:(NSEvent *)event 
{ 
    [[NSCursor closedHandCursor] push]; 
} 

- (void)mouseUp:(NSEvent *)event 
{ 
    [NSCursor pop]; 
} 

cevap

10

görüntülemek için imleci ayarlamak için addCursorRect:cursor: kullanmayı deneyin.

görünümünüz için resetCursorRects geçersiz kılar

:

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

Sen imleç rects güncellemek zorlamak için invalidateCursorRectsForView: çağırmanız gerekir:

[self.window invalidateCursorRectsForView:self]; 

Ama seni görmek dışında farklı imleç yapmak istiyorsanız senin mouseDragged: yönteminde [[NSCursor closedHandCursor] set]'u arayabilir.

+0

Ah! Böyle bir şey gördüm ama * eklemek istediğim bir şey için * reset * geçersiz kılmak için aptalca görünüyordu. Şimdi anladım ki şimdi imleç rect'i şimdiki görüşün yerini değiştirdiğimde geçersiz hale geliyor! Teşekkürler. – borrrden

+2

addCursorRect argümanı, [[self frame] 'değil,' [self bounds] 'dir. – alecail

14

Eğer -mouseDown yapabileceğiniz sürüklerken diğer görünümler imleci değiştirmek istemiyorsanız:

[[self window] disableCursorRects]; 

ve -mouseUp içinde:

[[self window] enableCursorRects]; 
[[self window] resetCursorRects]; 
+3

bunun için giderseniz, mouseUp'ın gerçek için tetiklendiğinden emin olun. NSTableView'da ve diğer görüntü türleri de, eğer mouseDown'da üs olarak adlandırırsanız, mouseUp artık tetiklenmez, çünkü altta yatan mekanizma olayları çaldı ve “tüketir”. Girilen/çıkılan farede bunu kullanmak iyi bir çözüm olabilir –