copy - NSTextField:公开其复制和粘贴方法

标签 copy paste nstextfield fieldeditor

我正在尝试在其窗口委托(delegate)中访问 NSTextField 实例的复制、剪切和粘贴方法,以便我可以自定义这些方法。我发现与 tableViews 和 textViews 不同,文本字段的复制、粘贴和剪切操作在委托(delegate)中没有响应。我的理解是所有文本控件共享窗口的字段编辑器,但情况似乎并非如此。

我想也许 TextField 的字段编辑器没有与窗口委托(delegate)共享,但是我做了一些测试,我发现当我在控件中输入时,那些字段编辑器是相同的——非常奇怪。

我目前的解决方法是使用 NSTextView 的子类实例,其中复制和粘贴操作方法会根据需要进行响应。然而,这有其自身的问题,我希望有某种方法可以让 NSTextFields 按预期工作。

最佳答案

nstextfield 没有复制和粘贴功能。这些只能在 nstextview 中找到。问题在于,当编辑文本字段时,它会在编辑期间打开一个名为 fieldeditor 的 TextView ,并将其设置为第一响应者。

如何解决:

每个文本字段都有一个单元格作为子单元与其相连(在图片中称为 cell 但应该更恰本地命名,例如 CustomTextEditor):

enter image description here

该单元格有一个用于实现名为 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/

相关文章:

performance - 为什么这个版本的矩阵复制这么慢?

javascript - 如何让我的复制和粘贴功能保持新行格式?

bash - 遍历 bash 中的值对

javascript - 意外的粘贴事件行为

objective-c - 使用 NSTextView 伪造 NSTextField 以获得漂亮的颜色?

batch-file - 批量将2个文件合并为一个文件时出现问题

c# - 将值复制到安全上下文中特定偏移量的字节数组中

swift - NSSecureTextField 可以显示明文吗?

c++ - 将 vector 复制到 vector

objective-c - 两个类之间的 IBOutlets 属性不保留。解除分配?