2012-07-02 18 views
7

Tại sao tôi không thể giữ con trỏ ở lại trong khoảng thời gian kéo chuột? Ngay sau khi tôi bắt đầu kéo, nó trở lại "Mũi tên" (mặc dù tôi đặt nó như là bàn tay mở trong ứng dụng đại biểu sau khi khởi động).NSCursor luôn đặt lại thành Arrow

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

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

Trả lời

10

Hãy thử sử dụng addCursorRect:cursor: để đặt con trỏ cho bạn xem.

Ghi đè resetCursorRects cho tầm nhìn của bạn:

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

Bạn cần phải gọi invalidateCursorRectsForView: để buộc cập nhật dễ phân biệt con trỏ của bạn:

[self.window invalidateCursorRectsForView:self]; 

Nhưng nếu bạn muốn có con trỏ khác nhau bên ngoài của bạn xem bạn có thể gọi [[NSCursor closedHandCursor] set] trong phương thức mouseDragged: của bạn.

+0

Oh! Tôi thấy một cái gì đó như thế này nhưng nó có vẻ ngớ ngẩn để ghi đè * đặt lại * cho một cái gì đó mà tôi muốn * thêm *. Bây giờ tôi hiểu rằng con trỏ rect bị vô hiệu khi tôi thay đổi vị trí của khung nhìn ngay bây giờ! Cảm ơn. – borrrden

+2

Đối số của hàm addCursorRect là '[self bounds]', không phải '[self frame]'. – alecail

14

Nếu bạn không muốn xem khác để thay đổi con trỏ chuột trong khi kéo bạn có thể làm trong -mouseDown:

[[self window] disableCursorRects]; 

và trong -mouseUp:

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

nếu bạn thực hiện việc này, hãy đảm bảo rằng mouseUp được kích hoạt thực. Trong NSTableView và các loại chế độ xem khác, nếu bạn gọi cơ sở trong mouseDown, thì mouseUp sẽ không được kích hoạt nữa, bởi vì cơ chế cơ bản đánh cắp và "tiêu thụ" sự kiện. Sử dụng chuột này vào/thoát cũng có thể là một giải pháp tốt –

Các vấn đề liên quan