我正在尝试在其窗口委托(delegate)中访问 NSTextField 实例的复制、剪切和粘贴方法,以便我可以自定义这些方法。我发现与 tableViews 和 textViews 不同,文本字段的复制、粘贴和剪切操作在委托(delegate)中没有响应。我的理解是所有文本控件共享窗口的字段编辑器,但情况似乎并非如此。
我想也许 TextField 的字段编辑器没有与窗口委托(delegate)共享,但是我做了一些测试,我发现当我在控件中输入时,那些字段编辑器是相同的——非常奇怪。
我目前的解决方法是使用 NSTextView 的子类实例,其中复制和粘贴操作方法会根据需要进行响应。然而,这有其自身的问题,我希望有某种方法可以让 NSTextFields 按预期工作。
最佳答案
nstextfield 没有复制和粘贴功能。这些只能在 nstextview 中找到。问题在于,当编辑文本字段时,它会在编辑期间打开一个名为 fieldeditor 的 TextView ,并将其设置为第一响应者。
如何解决:
每个文本字段都有一个单元格作为子单元与其相连(在图片中称为 cell
但应该更恰本地命名,例如 CustomTextEditor
):
该单元格有一个用于实现名为 fieldEditorForView
的自定义字段编辑器的方法:
class cell: NSTextFieldCell {
var editor: NSTextView
override func fieldEditorForView(aControlView: NSView) -> NSTextView? {
if editor == nil {
editor = ESPasteView()
}
return editor
}
}
上述函数允许您提供自己的自定义 NSTextView
子类:
class ESPasteView: NSTextView, NSTextViewDelegate {
override func paste(sender: AnyObject?) {
Swift.print("user tries to paste")
super.pasteAsPlainText(nil)
}
}
归功于:
How to disable context menus with right mouse click in an NSTextField (Cocoa)?
和指出现场编辑的 Ken Thomases。
关于copy - NSTextField:公开其复制和粘贴方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15748945/