Swift & NSTextField:如何使用文本完成

Swift & NSTextField: How to work with Text Completion

我想为 NSTextField 创建这样的自动完成列表:

我发现了这个: https://developer.apple.com/documentation/appkit/nscontroltexteditingdelegate/1428925-control

optional func control(_ control: NSControl, 
             textView: NSTextView, 
          completions words: [String], 
  forPartialWordRange charRange: NSRange, 
  indexOfSelectedItem index: UnsafeMutablePointer<Int>) -> [String]

有人可以解释一下如何在任何示例中使用它吗? 实在看不懂。

我试图实现这个,但没有任何效果。您可以在下面找到我的代码。

提前致谢

我的代码:

class ViewController: NSViewController, NSTextFieldDelegate {

@IBOutlet weak var InputField: NSTextField!

override func viewDidLoad() {
    super.viewDidLoad()

    InputField.delegate = self
}

func control(_ control: NSControl, textView: NSTextField, completions words: [String], forPartialWordRange charRange: NSRange, indexOfSelectedItem index: UnsafeMutablePointer<Int>) -> [String] {

    let words = ["Hello", "Brother"]

    return words
}

@IBAction func CompleteButton(_ sender: NSButton) {
    print("pressed")
    InputField.complete(nil)

} }

但是如果我尝试按下按钮,我会在我的控制台中收到此错误:

pressed
[NSTextField complete:]: unrecognized selector sent to instance 0x10066ae00
[General] -[NSTextField complete:]: unrecognized selector sent to instance 0x10066ae00

该方法只允许您控制建议。 (例如:订单、过滤器等。)

所以,如果您不想自定义您的建议,您只需要 return 字词:

optional func control(_ control: NSControl, 
             textView: NSTextView, 
          completions words: [String], 
  forPartialWordRange charRange: NSRange, 
  indexOfSelectedItem index: UnsafeMutablePointer<Int>) -> [String] {
  return words
}

NSTextField 没有实现 complete:NSTextView 实现了。 NSTextField 使用字段编辑器 NSTextView 来编辑其内容,请参阅 Text Fields, Text Views, and the Field Editor。使用 currentEditor() 从文本字段中获取字段编辑器。

@IBAction func completeButton(_ sender: NSButton) {
    inputField.currentEditor()?.complete(nil)
}