gpt4 book ai didi

swift - 如何使用NSControl的edit(withFrame :editor:delegate:event:)?

转载 作者:行者123 更新时间:2023-11-28 07:32:14 25 4
gpt4 key购买 nike

我有一个自定义的 NSControl,我正在尝试让函数 edit(withFrame:editor:delegate:event:) 工作。调用它时,我希望字段编辑器出现在我的 View 中,但没有任何反应。

我已经通读了该函数的文档,并创建了一个最小示例:

class MyView: NSControl, NSControlTextEditingDelegate, NSTextDelegate {
required init?(coder: NSCoder) {
super.init(coder: coder)
isEnabled = true
}

override func mouseDown(with event: NSEvent) {
let editor = window!.fieldEditor(true, for: nil)!
let rect = bounds.insetBy(dx: 10.0, dy: 10.0)
self.edit(withFrame: rect, editor: editor, delegate: self, event: event)
}

func control(_ control: NSControl, textShouldBeginEditing fieldEditor: NSText) -> Bool {
return true
}

func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
self.endEditing(fieldEditor)
return true
}

func textShouldBeginEditing(_ textObject: NSText) -> Bool {
return true
}
}

正如您从示例中看到的那样,我不太确定是否符合 NSControlTextEditingDelegateNSTextDelegate。我实现的功能似乎都没有被调用。

或者我可能误解了函数的目的?我应该覆盖它而不是调用它吗?

最佳答案

我不是字段编辑器方面的专家,但浏览 Apple 的文档似乎表明,它旨在在控件 NSCell 类上实现并自己呈现文本。如果希望字段编辑器出现在上面的示例中,则必须将字段编辑器插入到 View 层次结构中。它不会自动发生。

class CustomTextControl: NSControl {
override func mouseDown(with event: NSEvent) {
// Make sure
if currentEditor() == nil {
if let controlWindow = window {
if controlWindow.makeFirstResponder(controlWindow) {
// It is safe to claim the field editor
if let editor = controlWindow.fieldEditor(true, for: nil) as? NSTextView {
addSubview(editor)
editor.frame = bounds
edit(withFrame: bounds, editor: editor, delegate: nil, event: event)
}
} else {
// Some other control has first responder, force first responder to resign
controlWindow.endEditing(for: nil)
}
}
}
}
}

我建议您阅读 Apple 的 Cocoa Text Architecture Guide 文档。具体Working with the Field EditorNSCell文档。这是一项非常重要的任务。

我想知道你想达到什么目的。

关于swift - 如何使用NSControl的edit(withFrame :editor:delegate:event:)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54388621/

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