gpt4 book ai didi

swift - 未调用 prepareForDragOperation()

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:51 27 4
gpt4 key购买 nike

我已经将 NSTextField (FileDropTextField) 子类化,并在 Main.storyboard 的 NSView(在窗口中)中创建了其中的 2 个。

当我从桌面拖动文件并将其放在第一个 FileDropTextField 上时,它会使用完整路径文本更新该字段,但永远不会调用 prepareForDragOperation()

如果我(从桌面)拖动同一个文件并将其放在第二个 FileDropTextField 上,将调用以下 3 个函数(如预期的那样),并且该字段不会自动更新为路径:

  • prepareForDragOperation()
  • performDragOperation()
  • concludeDragOperation()

Swift代码如下:

import Cocoa

class FileDropTextField: NSTextField {

override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)

// Drawing code goes here.
}

override func awakeFromNib() {
NSLog("awakeFromNib")
self.register(forDraggedTypes: [NSPasteboardTypeString, NSURLPboardType, NSFilenamesPboardType])
}

override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
self.stringValue = ""
NSLog("draggingEntered")
return NSDragOperation.generic;
}

override func draggingUpdated(_ sender: NSDraggingInfo) -> NSDragOperation {
NSLog("draggingUpdated")
return NSDragOperation.generic;
}

override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool {
NSLog("prepareForDragOperation")
return true
}

override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
NSLog("performDragOperation")
return true
}

override func concludeDragOperation(_ sender: NSDraggingInfo?) {
NSLog("concludeDragOperation")
}

override func draggingExited(_ sender: NSDraggingInfo?) {
NSLog("draggingExited")
}

override func draggingEnded(_ sender: NSDraggingInfo?) {
NSLog("draggingEnded")
}

}

如果我通过复制在 Main.storyboard 中创建第二个字段,或者如果它是作为单独的操作创建(在 Main.storyboard 中),这没有区别。我检查了每个属性的所有属性,发现它们之间没有区别(除了对象 ID 和约束信息)。

谁能解释为什么我在这两个对象上放置相同的对象(桌面文件)时会出现不同的行为(当文件被放置在字段上时)?导致调用 prepareForDragOperation() 的行为是我期望的正确行为。

(我在 macOS Sierra 10.12.1 上使用 Xcode 8.1、Swift3)

谢谢!

最佳答案

您是否尝试过在第一个文本字段上散焦,然后再次拖放?

如果它有效,那么我猜是因为有一个不可见的编辑器字段在它被聚焦时就位于文本字段的顶部,这使得无法触发委托(delegate)方法。

所以不要使用textfield,尝试使用textview

关于swift - 未调用 prepareForDragOperation(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40456660/

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