我试图在其窗口委托中访问NSTextField实例的复制,剪切和粘贴方法,以便我可以自定义这些方法。我发现,与tableViews和textViews不同,textfield的复制,粘贴和剪切操作在委托中没有响应。我的理解是所有文本控件都共享窗口的字段编辑器,但似乎并非如此。
我想也许TextField的字段编辑器没有与窗口委托共享,但我做了一些测试,我看到当我输入控件时,那些字段编辑器是相同的 - 非常奇怪。
我目前的解决方法是使用NSTextView的子类实例,其中复制和粘贴操作方法根据需要进行响应。然而,这有其自身的问题,我希望有一些方法可以让NSTextFields按预期工作。
答案 0 :(得分:3)
nstextfield没有复制和粘贴功能。这些只能在nstextview中找到。问题是当编辑文本字段时,它会在编辑过程中打开一个名为fieldingitor的文本视图,并将其设置为第一个响应者。
如何解决:
每个文本文件都有一个小孩作为一个孩子连接它。 (ps不是程序员。我称之为孩子)
单元格有一个实现自定义字段编辑器的方法,名为fieldingitorforview
class cell: NSTextFieldCell {
override func fieldEditorForView(aControlView: NSView) -> NSTextView? {
return ESPasteView()
}
}
此功能允许您插入自己的自定义nstextview
这是我的自定义nstextview
class ESPasteView: NSTextView, NSTextViewDelegate {
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
}
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指出了现场编辑
答案 1 :(得分:0)
也许你可以看看NSTextField的:
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard type:(NSString *)type;
- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard type:(NSString *)type;
这将允许您拦截呼叫自定义响应。