Tôi đang cố gắng tạo một ứng dụng cho OS X bằng Swift và Cocoa. Tôi muốn ứng dụng phản hồi các sự kiện chính mà không tập trung vào/trong trường văn bản. Tôi tạo ra một dự án ca cao mới với cốt truyện trong Xcode, và đã sửa đổi lớp ViewController.swift như sau:Swift NSViewController đáp ứng với sự kiện mouseDown, nhưng không phải sự kiện KeyDown
import Cocoa
class ViewController: NSViewController {
override func mouseDown(theEvent: NSEvent) {
println("Mouse Clicked")
}
override func keyDown(theEvent: NSEvent) {
println("Key Pressed")
}
override func viewDidLoad() {
super.viewDidLoad()
}
override var representedObject: AnyObject? {
didSet {
}
}
}
Khi tôi chạy chương trình, tôi nhận được giao diện điều khiển đầu ra khi tôi bấm vào cửa sổ, nhưng tôi don không nhận được bất kỳ đầu ra giao diện điều khiển nào khi tôi nhấn bất kỳ phím nào.
Vì vậy, câu hỏi của tôi là: Tại sao chương trình của tôi phản hồi sự kiện chuột chứ không phải các sự kiện chính? Tôi cần phải thực hiện thêm các bước nào để thực hiện các sự kiện quan trọng khi các sự kiện chuột thực hiện?
Dường như bộ điều khiển chế độ xem của tôi nằm trong chuỗi phản hồi vì nó chặn các sự kiện chuột, do đó dường như không phải vấn đề. Tôi đã tìm thấy câu trả lời khác trên đây trên SE nói rằng tôi cần phải phân lớp NSView hoặc lớp NSWindow. Có thể nhận các sự kiện quan trọng mà không làm điều đó không?
Xin cảm ơn trước.
EDIT: Ngoài câu trả lời được chấp nhận, Swift - Capture keydown from NSViewController là giải pháp tuyệt vời, rõ ràng.
bạn có thể vui lòng cung cấp mã của mình cho phân lớp NSView không? Tôi cần phải làm điều tương tự như tôi tin. Tôi đang cố gắng để có được các phím mũi tên khi nhấn. – justColbs
Câu trả lời hay nhất cho câu hỏi này là ở đây: http://stackoverflow.com/questions/32446978/swift-capture-keydown-from-nsviewcontroller/32447474 Tôi đăng bài này bởi vì không có ví dụ nào được đưa ra thực sự giúp tôi và tôi có một câu trả lời thực sự đơn giản trong bài viết ở trên đã hoạt động, ngay cả trong Xcode 8 và Swift 3. – jvarela
@jvarela Đó là một liên kết tốt. Cảm ơn. Tôi sẽ cập nhật câu hỏi của mình để liên kết với nó. – Bernem