达到字符数后,如何以编程方式将光标从一个 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以任何方式从光标到文件末尾选择? [关闭]
iOS 以编程方式添加 UITextField 在编辑时不会将文本滚动到光标位置