2011-08-19 13 views
5

Tôi đã tìm kiếm tài liệu của Apple và chức năng duy nhất tôi có thể tìm thấy liên quan đến nhấp đúp chỉ trả về thời gian chấp nhận được giữa các lần nhấp để được xem là nhấp đúp.Nhận sự kiện nhấp đúp

Ai đó có thể cho tôi xem ví dụ về sự kiện nhấp đúp không?

+0

iOS hoặc Mac OS X? – duskwuff

+1

@duskwuff OSX (xem thẻ) – Sciguy77

+1

@duskwuff: Ngoài ra, iOS không có nhấp chuột. –

Trả lời

14

Ghi đè phương thức NSResponder-mouseUp: và kiểm tra sự kiện được cung cấp clickCount. Nếu clickCount == 2, thì bạn đang xem xét nhấp đúp. Nếu đó là 1, thì chỉ cần một cú nhấp chuột. 0, sau đó họ chờ đợi đủ lâu giữa chuột và chuột lên mà hệ thống quyết định nó không phải là một nhấp chuột, chỉ cần phân biệt xuống sau đó lên các sự kiện.

- (void)mouseUp:(NSEvent *)event 
{ 
    NSInteger clickCount = [event clickCount]; 
    if (2 == clickCount) [self handleDoubleClickEvent:event]; 
} 

Điều này giả định đối tượng xử lý nhấp chuột là một phần của chuỗi trả lời. Nếu không, bạn sẽ phải nhận sự kiện của mình theo cách khác, như phân lớp NSApplication hoặc NSWindow và ghi đè -sendEvent: để chặn sự kiện thích hợp trước khi sự kiện đó được chuyển đi nữa.

+5

Cần nhấn mạnh rằng "NSResponder" trong câu trả lời này đề cập đến các lớp học trong Cocoa (mà NSView, NSWindow, và NSApplication kế thừa từ), không phải là người trả lời khác người đặt tên mình sau khi nó. –

2

Cũng lưu ý rằng một số NSControlsetDoubleAction: để bộ chọn đăng ký qua setDoubleAction: được gửi đến mục tiêu. Xem các tài liệu chính thức của

+0

Sự kiện (đối tượng NSEvent) không được chuyển đến đích; một thông điệp hành động được gửi đến đích, nhưng, như thường lệ đối với một thông báo hành động, đối số đơn là điều khiển (xem bảng hoặc bất kỳ) gửi tin nhắn. Tôi chắc chắn rằng bạn không có nghĩa là đối tượng NSEvent, nhưng tôi muốn chắc chắn rằng đó là rõ ràng. –

+0

Vâng đó là ý của tôi; Tôi sẽ nói lại nó. Cảm ơn. – Yuji

+0

Trong trường hợp của tôi, tôi đã phải đặt mục tiêu cho một NSTableView khi chạy trên hệ điều hành trước 10.10, nhưng 10.10 làm việc OK mà không có mục tiêu được thiết lập (tự trong trường hợp của tôi) – ghr