gpt4 book ai didi

Cocoa:对 QLPreviewPanel 中的 keyDown 使用react

转载 作者:行者123 更新时间:2023-12-03 16:28:21 26 4
gpt4 key购买 nike

我在 Swift 2 中通过以下方式在我的项目中实现了快速查看(我将其包含在此处以供引用,因为它可能会帮助其他人进行设置)。

我的 NSViewController 包含一个 NSTableView 子类,我在其中实现了 keyDown 来监听按下的空格键(可能不是最好的方法,但它有效):

override func keyDown(theEvent: NSEvent) {
let s = theEvent.charactersIgnoringModifiers!
let s1 = s.unicodeScalars
let s2 = s1[s1.startIndex].value
let s3 = Int(s2)
if s3 == Int(" ".utf16.first!) {
NSNotificationCenter.defaultCenter().postNotification(NSNotification(name: "MyTableViewSpacebar", object: nil))
return
}
super.keyDown(theEvent)
}

在我的 View Controller 中,我有一个用于此通知的观察者以及 QLPreviewPanel 所需的功能:

//...
class ViewController: NSViewController {

@IBOutlet weak var myTableView: MyTableView!
var files = [FilesListData]() //array of custom class
//...

override func viewDidLoad() {
//...

NSNotificationCenter.defaultCenter().addObserver(self, selector: "spaceBarKeyDown:", name: "MyTableViewSpacebar", object: nil)
}

func spaceBarKeyDown(notification: NSNotification) {
if let panel = QLPreviewPanel.sharedPreviewPanel() {
panel.makeKeyAndOrderFront(self)
}
}

override func acceptsPreviewPanelControl(panel: QLPreviewPanel!) -> Bool {
return true
}

override func beginPreviewPanelControl(panel: QLPreviewPanel!) {
panel.delegate = self
panel.dataSource = self
}

override func endPreviewPanelControl(panel: QLPreviewPanel!) {
}

}

extension ViewController: QLPreviewPanelDataSource {
func numberOfPreviewItemsInPreviewPanel(panel: QLPreviewPanel!) -> Int {
return self.myTableView.selectedRowIndexes.count
}

func previewPanel(panel: QLPreviewPanel!, previewItemAtIndex index: Int) -> QLPreviewItem! {
if self.myTableView.selectedRow != -1 {
var items = [QLPreviewItem]()

let manager = NSFileManager.defaultManager()
for i in self.myTableView.selectedRowIndexes {
let path = self.files[i].path //path to a MP3 file
if manager.fileExistsAtPath(path) {
items.append(NSURL(fileURLWithPath: path))
} else {
items.append(qm_url) //image of a question mark used as placeholder
}
}

return items[index]
} else {
return qm_url //image of a question mark used as placeholder
}
}
}

我现在想做的是在快速查看面板打开时监听按下的“向上箭头”和“向下箭头”键,以便更改在NSTableView,与快速查看文件时 Finder 的行为非常相似。我不知道如何实现这一点。有什么想法吗?

谢谢。

最佳答案

终于找到了我要找的东西,而且其实很简单。

由于我的主视图 Controller 也是 QLPreviewPanel 的委托(delegate),因此我添加了以下内容:

extension ViewController: QLPreviewPanelDelegate {
func previewPanel(panel: QLPreviewPanel!, handleEvent event: NSEvent!) -> Bool {
let kc = event.keyCode
if (kc == 126 || kc == 125) { //up and down arrows
if event.type == NSEventType.KeyDown {
self.myTableView.keyDown(event) //send the event to the table
} else if event.type == NSEventType.KeyUp {
self.myTableView.keyUp(event)
}
return true
}
return false
}
}

然后在我的 TableView 委托(delegate)中:

func tableViewSelectionDidChange(notification: NSNotification) {
guard myTableView.numberOfSelectedRows > 0 else {
if let panel = QLPreviewPanel.sharedPreviewPanel() {
if panel.visible {
panel.close()
}
}
return
}

if let panel = QLPreviewPanel.sharedPreviewPanel() {
if panel.visible {
panel.reloadData()
}
}
}

就是这样! QLPreviewPanelDataSource 处理其余部分。

关于Cocoa:对 QLPreviewPanel 中的 keyDown 使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com