达到字符数后,如何以编程方式将光标从一个 NSTextField 移动到另一个?

How do I programatically move the cursor from one NSTextField to another after a character count has been reached?

我正在尝试创建一个 window,用户可以在其中输入产品的激活密钥,我已经创建了 5 个不同的 NSTextField,如图所示。

我想补充的是the ability for the cursor to move to the next text field once a character count has been reached (which is 5 characters maximum per textfield)

我确实找到了这方面的代码,但它是针对 IOS 的,但没有用,因为我不知道要进行哪些更改

这是我试过的代码

    override func viewDidLoad() {
    super.viewDidLoad()
    ActKeyOne.textDidChange(Notification.Name.init(rawValue: "textchanged"))
}

它给出了错误:

Cannot convert value of type 'Notification.Name' (aka 'NSNotification.Name') to expected argument type 'Notification'

此问题的部分答案由@cheesey

发布here

这是创建 window 的完整代码,它从用户 (This is using swift 4) 那里获取产品的许可证密钥。

首先将文本字段设置为 viewDidLoad 函数中的代表和第一响应者,然后在达到字符串限制后更改第一响应者

class CommercialActivationView: NSViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    @IBOutlet weak var firsttextfield: NSTextField!
    @IBOutlet weak var secondtextfield: NSTextField!
    @IBOutlet weak var thirdtextfield: NSTextField!

    firsttextfield.window?.makeFirstResponder(firsttextfield)
    firsttextfield.delegate = self
  }

  func makeFirstResponder() {
    
    if firsttextfield.stringValue.count == 5 {
        firsttextfield.window?.makeFirstResponder(secondtextfield)
    }
    if secondtextfield.stringValue.count == 5 {
        secondtextfield.window?.makeFirstResponder(thirdtextfield)
    }
  }
}

现在创建扩展,在用户每次编辑 TextField (Here i'm limiting the number of characters per text field to 5) 时创建字符限制或文本字段。

extension CommercialActivationView: NSTextFieldDelegate {
func controlTextDidChange(_ obj: Notification) {
    
    let object = obj.object as! NSTextField
    if object.stringValue.count > 5{
        object.stringValue = String(object.stringValue.dropLast())
        makeFirstResponder()
    }
}

这样一来,一旦在 1 TextField 中达到 5 个字符,它就会自动切换到下一个。另外,我发布的代码适用于 3 个 TextFields,如果需要,可以添加更多文本字段。