2010-01-17 24 views
39

Tôi đang tìm danh sách toàn diện các mã khóa khả dụng có thể sử dụng với lớp học NSEvent của Cocoa. Lớp NSEvent có thuộc tính keyCode, được định nghĩa là unsigned short. Các mã sau đây, khi được đặt trong một đối tượng giao diện người dùng phù hợp, sẽ echo các mã chủ chốt như họ đang ép:Tôi có thể tìm danh sách các mã khóa để sử dụng với lớp NSEvent của Cocoa ở đâu?

- (void)keyDown:(NSEvent *)theEvent 
{ 
    NSLog(@"%d", [theEvent keyCode]); 
} 

Từ mã này, tôi có thể dễ dàng xem những mã phù hợp với một số phím, nhưng tôi muốn tìm một tài liệu chính thức ở đâu đó liệt kê tất cả chúng. Tôi dự kiến ​​Apple sẽ có một tệp tiêu đề ở đâu đó giống như sau:

enum { 
    ... 
    NSKeyCodeLeftArrow = 123, 
    NSKeyCodeRightArrow = 124, 
    ... 
}; 

Nhưng nếu có, tôi vẫn chưa tìm thấy.

+2

Lưu ý rằng các phím và phím truyền thông như "Home", "Internet" trên bàn phím lớn được xử lý bởi sự kiện NSSystemDefined, thay vì các sự kiện quan trọng thông thường. Điều đó giải thích các mã khóa bị thiếu cho các khóa đó (Windows có mã khóa cho tất cả các khóa và cũng có các khóa X11 cho chúng, nhưng mã phím của Mac cho các sự kiện bàn phím dường như không bao gồm tất cả các khóa đó). –

+0

[W3C DOM Level 3 KeyboardEvent code Values] (https://www.w3.org/TR/2015/WD-DOM-Level-3-Events-code-20150428/) – davidcondrey

Trả lời

20

Theo như tôi biết, không có enum hoặc danh sách mã khóa. Tuy nhiên, để có được hành vi tương tự, bạn có thể gọi interpretKeyEvents: trong keyDown: sẽ gọi các phương thức hành động thích hợp, tất cả đều được diễn tả trong NSResponder (ví dụ moveLeft:, insertTab:, vv)

+1

Điều đó cực kỳ tiện dụng. Cảm ơn nhiều! –

+9

Bây giờ tôi biết những gì cần tìm, tôi tìm thấy một liên kết mô tả tất cả các phương pháp NSResponder đó về các tổ hợp phím mặc định gọi chúng: http://www.hcs.harvard.edu/~jrus/Site/System % 20Bindings.html –

+0

Trang đó rất hữu ích. Nice tìm! :) –

27

Here you go. Đó là một bản đồ của tất cả các phím ảo -codes trên bố cục bàn phím mở rộng của Hoa Kỳ, từ Macintosh bên trong cũ: Văn bản. Hầu hết các mã khóa vẫn còn hiện tại, mặc dù tôi nghi ngờ rằng các bàn phím Apple mới nhất — những bàn phím có khóa phương tiện — có thể đã thay đổi một vài phím chức năng.

Lưu ý: Bàn phím ISO và không mở rộng có thể có các mã khóa khác nhau cho một số phím. Nếu bạn có bàn phím như vậy, hãy thử ứng dụng Peter Maurer's Key Codes. Trang web của anh ấy bị hỏng, vì vậy here's my copy.

+0

Cảm ơn bạn. Điều đó chắc chắn giải thích lý do tại sao không có bảng mới có sẵn.FTA: * Mac OS X sử dụng cùng một mã khóa ảo được sử dụng cho Bàn phím mở rộng của Apple huyền thoại. Do đó, bảng trong Macintosh Bên trong: Văn bản vẫn được áp dụng. * –

+1

Tôi đã viết bài báo. ☺ Đúng là bàn phím mở rộng của Hoa Kỳ (và chắc chắn * đúng với bàn phím của tôi, vì nó * là * Bàn phím mở rộng của Apple II), nhưng có thể không đúng với bàn phím không mở rộng và/hoặc không phải của Mỹ. Tôi nên thêm ghi chú vào bài đăng mà tôi chưa kiểm tra cả hai trường hợp. –

+0

Ah, vì vậy bạn đã làm! Công cụ tuyệt vời. Tôi không thể tin rằng bạn (vẫn còn?) Bằng cách sử dụng bàn phím đó. :) Làm một số đọc trực tuyến, có vẻ như là một cái gì đó gần với một * tôn giáo * dựa trên mô hình đó. Điều gì làm cho nó tốt hơn nhiều so với bất kỳ thứ gì hiện có trên thị trường? Tôi thực sự tò mò. –

6

Theo chủ đề diễn đàn này, các hằng số có sẵn trong HIToolbox/Events.h

http://forums.macrumors.com/showthread.php?t=780577

Họ có thuận tiện sao chép + dán toàn bộ các hằng số vào diễn đàn quá. Nếu tiêu đề hiện có sẵn ở đây:

/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h 
12

Để đưa HIToolbox/Events.h (như đã đề cập trong câu trả lời berrange) trong XCode 4 bạn chỉ cần đi tới Link Binaries với Libraries và thêm khuôn khổ Carbon (trong đó bao gồm HIToolbox) và sau đó nhập tiêu đề Carbon chính trong tệp nơi bạn đang kiểm tra các mã phím.

#import <Carbon/Carbon.h> 

Tôi mất một giây để biết rằng tôi không thể nhập HIToolbox/Events.h trực tiếp nên tôi nghĩ tôi sẽ đăng bài này trong trường hợp nó giúp ai đó.

+1

Cảm ơn - nếu bạn tìm thấy câu hỏi này , đây là giải pháp để sử dụng. – petert

+2

Không cần phải liên kết với khung Carbon để sử dụng những enums đó. Đủ để thêm tiêu đề để có thể sử dụng chúng cho trường hợp cụ thể này (trừ khi tất nhiên bạn cần sử dụng các hàm Carbon khác). – diegoreymendez

+0

Cần chú ý (vì câu hỏi là về 'NSEvent') ngoài các mã khóa trong' HIToolbox/Events.h', bạn cũng có thể muốn các điểm mã unicode được định nghĩa trong 'NSEvent.h' của AppKit, chẳng hạn như' NSRightArrowFunctionKey ', vì chúng được sử dụng để thiết lập thuộc tính' characters' của 'NSEvent'. –

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