Tôi đang cố gắng tìm cách phát hiện xem một phím (trên bàn phím) đã được nhấn vào Swift chưa. Bất kỳ ý tưởng và đề xuất sẽ được đánh giá rất nhiều.Phát hiện sự kiện báo chí quan trọng trong Swift
Trả lời
Vì bạn đã cập nhật câu hỏi và muốn biết cách thực hiện điều này cho cửa sổ, đây là câu trả lời. Subclass NSWindow và sử dụng phân lớp này thay thế.
lớp tùy chỉnh của bạn sẽ trông như thế này:
import Cocoa
class EditorWindow: NSWindow {
override func keyDown(event: NSEvent) {
super.keyDown(event)
Swift.print("Caught a key down: \(event.keyCode)!")
}
}
Nếu bạn đã thực hiện cửa sổ của bạn trong giao diện Builder/XCode, nhấp vào đối tượng cửa sổ và đi đến thuộc tính Inspector (⌥ + ⌘ +). Thanh tra thuộc tính sẽ nằm trong thanh bên ở bên phải. Đảm bảo cửa sổ của bạn được chọn trong Trình tạo giao diện, ở đầu Trình kiểm tra thuộc tính trong khu vực Custom Class
đặt lớp mới của bạn vào đầu vào lớp.
Để giao tiếp sự kiện từ lớp cửa sổ này để ứng dụng của tôi tôi thêm một chức năng để cửa sổ mà chấp nhận một hàm callback mà tôi sau đó lưu trữ trong một mảng các chức năng gọi lại. Tôi nhận được quyền truy cập vào cửa sổ này thông qua AppDelegate mà có thể nhận được một tham chiếu yếu đến cửa sổ chính hiện tại. Sau đó, trong hàm trên, tôi lặp lại tổng thể các callbacks và gọi nó với NSEvent làm đối số. Trước tiên tôi cũng kiểm tra xem có bất kỳ phím lệnh nào như các phím tùy chọn đang được nhấn đầu tiên thông qua thuộc tính modifierFlags
trong sự kiện hay không. Nó kết thúc lên tim như thế này:
import Cocoa
typealias Callback = (NSEvent) ->()
class KeyCaptureWindow: NSWindow {
var keyEventListeners = Array<Callback>()
override func keyDown(event: NSEvent) {
if event.modifierFlags.contains(NSEventModifierFlags.CommandKeyMask) {
super.keyDown(event)
return
}
for callback in keyEventListeners {
callback(event)
}
}
func addKeyEventCallback(callback: Callback) {
keyEventListeners.append(callback)
}
}
Và sau đó ở những nơi khác trong mã của tôi, tôi có một dòng như vậy:
let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
let mainWindow = appDelegate.getWindow()
mainWindow.addKeyEventCallback(handleKeyEvent)
tôi đã thêm các phương pháp getWindow
đến lớp ứng dụng đại biểu của tôi. Phương thức này trả về số NSWindow
truyền tới KeyCaptureWindow
. Có thể có một cách tốt hơn để làm tất cả điều này nhưng điều này làm việc cho tôi. Một cách khác để có thể làm điều này là sử dụng người trả lời đầu tiên và NSView
, nhưng đó không phải là cách tôi đã làm điều đó.
Điều này thực sự thực sự hữu ích, cảm ơn bạn rất nhiều. – andertonslase
Nếu có nhiều bàn phím được kết nối với máy tính, có thể nhận dạng bàn phím nào đến từ bàn phím không? – OrangePot
Các phiên bản gần đây của Swift đã sửa đổi chức năng. Nó bây giờ là keyDown (với sự kiện: NSEvent). Cảm ơn câu trả lời, rất thông tin! –
Bạn phải ghi đè phương thức keyDown
.
var direction:String = ""
override func keyDown(theEvent: NSEvent!) // A key is pressed
{
if theEvent.keyCode == 123
{
direction = "left" //get the pressed key
}
else if theEvent.keyCode == 124
{
direction = "right" //get the pressed key
}
println("Key with number: \(theEvent.keyCode) was pressed")
}
- 1. Phát hiện sự kiện quan trọng (Enter) với JQuery trong Javascript (trên nền tảng Linux)
- 2. Hủy sự kiện báo chí chính
- 3. Sự kiện báo chí má là gì?
- 4. Trả lời các sự kiện quan trọng trong scala
- 5. Phản ứng không đáp ứng với sự kiện quan trọng
- 6. Quan sát giá trị quan trọng trong Swift 4
- 7. UIButton với báo chí đơn và sự kiện báo chí nhanh chóng nhanh chóng
- 8. Phát hiện sự kiện khóa kết hợp
- 9. Sự phát triển AI quan trọng nhất trong ngày nay?
- 10. Danh sách dữ liệu và nhập sự kiện quan trọng
- 11. Phát hiện sự kiện tổ chức sự kiện trong Angularjs
- 12. Bluetooth: Phát hiện sự kiện bằng Bluez
- 13. Thay đổi tập trung vào đầu vào trên một sự kiện quan trọng trong AngularJS
- 14. Nhận các sự kiện phát hành phím và bấm quan trọng trong các ứng dụng đầu cuối Linux?
- 15. Chụp cả các phím đặc biệt và trường hợp quan trọng trong sự kiện javascript
- 16. Phát hiện nhiều sự kiện tải ảnh
- 17. Android GestureListener không phát hiện sự kiện
- 18. Phát hiện nhấp vào sự kiện nền
- 19. Tại sao studio trực quan lại thu hút các sự kiện quan trọng trước autohotkey?
- 20. Các mẫu thiết kế quan trọng trong phát triển web quan trọng như thế nào?
- 21. Phát hiện sự kiện theo cách thủ công trong RxSwift
- 22. Làm cách nào để xử lý sự kiện báo chí dài của PanResponder?
- 23. làm thế nào để có được sự kiện báo chí dài trong js góc?
- 24. Lắng nghe các sự kiện quan trọng cho cấu trúc phân cấp thành phần
- 25. Góc phát hiện sự kiện 2 vs Chủ đề
- 26. Cách phát hiện sự kiện MouseUp bên ngoài cửa sổ?
- 27. jQuery: Phát hiện ép nút chuột trong sự kiện MouseMove
- 28. Phát hiện sự kiện bàn phím trong C
- 29. Phát hiện Ctrl + A trong sự kiện keyup
- 30. Phát hiện sự kiện gắn ổ đĩa trong C#
Bạn đã thử gì? –
Đây không phải là bản sao. Câu trả lời của Objective-C không trùng lặp với các câu hỏi Swift. –
Trong bối cảnh nào bạn muốn phát hiện một phím bấm? Trên cửa sổ? Một đầu vào? –