达到字符数后,如何以编程方式将光标从一个 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
,如果需要,可以添加更多文本字段。
我正在尝试创建一个 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
,如果需要,可以添加更多文本字段。