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

Posted

技术标签:

【中文标题】达到字符数后,如何以编程方式将光标从一个 NSTextField 移动到另一个?【英文标题】:How do I programatically move the cursor from one NSTextField to another after a character count has been reached? 【发布时间】:2020-07-30 08:01:57 【问题描述】:

我正在尝试创建一个窗口,用户可以在其中输入产品的激活密钥,我通过创建 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 的,因为我不知道要进行哪些更改(Code for the IOS version)

这是我尝试过的代码

    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'

【问题讨论】:

使用文本字段通知计算每个文本字段中的字符数。 textDidChangeNotification & makeFirstResponder(_:)。尝试一下,如果它不适合您,请使用不适合您的代码编辑您的问题。 您可以使用委托和controlTextDidChange(_:),而不是textDidChangeNotification 看起来 controlTextDidChange( :) 效果更好,谢谢大家 【参考方案1】:

这个问题的部分答案由@cheesey 发布here

这里是创建一个窗口的完整代码,该窗口从用户 (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 如果需要,可以添加更多文本字段。

【讨论】:

以上是关于达到字符数后,如何以编程方式将光标从一个 NSTextField 移动到另一个?的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft以任何方式从光标到文件末尾选择? [关闭]

java 如何 按回车 光标换到下个输入框

如何在UITextView中以编程方式移动光标?

iOS 以编程方式添加 UITextField 在编辑时不会将文本滚动到光标位置

如何将光标设置到 Internet Explorer 中文本 INPUT 字段的字符串值中的特定位置?

如何从 RichTextBox 中的光标位置选择前一个字符