在Swift中设置NSTextfield中的最大字符数(一)
如何在Swift中将多个NSTextfields(OSX cocoa app,NOT iOS)中的最大字符数设置为1?在Swift中设置NSTextfield中的最大字符数(一)
请解释如何做到这一点,因为在OSX应用程序开发方面,我是一个完整的新手,因此我不明白“Use NSFormatter”这样的简短答案,因为我不知道它是什么以及如何执行它。 Like Examples
您不需要限制用户输入的字符,只需查看输入的第一个字符即可。事实上,这可能会更好,因为您将始终必须处理可能的用户错误。如果你想要的话,你可以通过获得characters.count来发出一个提示,表明他们输入了太多。如果他们根本没有回答,你可能需要一个警报。如果您使用1个NSTextField和一个按钮设置故事板并连接它们,下面的代码将按原样工作。如果您有多个文本字段,即像多项选择测试,只需以相同的方式设置所有文本字段即可。
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var firstLetter: NSTextField!
,因为你需要添加尽可能多的文本字段:
@IBOutlet弱VAR secondLetter:的NSTextField!
@IBOutlet weak var thirdLetter:NSTextField!
等
@IBAction func button(sender: AnyObject) {
var firstEntry = firstLetter!.stringValue
var index1 = firstEntry.startIndex
if firstEntry.characters.count > 1 {
runMyAlert("Bad USER! ONLY ONE Character!")
}
if firstEntry == "" { //left it blank
runMyAlert("You need to enter at least one character!")
exit(0) //or you'll crash on next line
}
var nameLetter1:Character = firstEntry[index1]
print("First Letter == \(nameLetter1) ")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
func runMyAlert(alertMessage: String){
var myWindow = NSWindow.self
let alert = NSAlert()
alert.messageText = "ERROR ERROR ERROR"
alert.addButtonWithTitle("OK")
alert.informativeText = alertMessage
alert.runModal()
}
}
有简单设置最大没有内置的方式,我想是因为你需要决定你想要什么样的行为。例如,如果该字段中已经有一个字符,并且用户输入了第二个字符,会发生什么情况?第二个字符应该被忽略吗?替换第一个?嘟?
在任何情况下,您都可以使用NSText Delegate方法获得所需的任何行为。使您的视图控制器(或任何具有逻辑的对象)成为文本字段的委托,并实现各种委托方法以执行您所需的操作。
再一次,确切的行为取决于你,但是如果我正在实现这一点,我可能倾向于使文本字段总是使用输入的最后一个字符(例如,如果一个字符已经存在,按下第二个字符取代第一个)。为此,您需要覆盖textDidChange
以查看文本字段的值,并在适当的情况下对其进行修改。例如:
class ViewController: NSViewController, NSTextFieldDelegate {
@IBOutlet weak var textField: NSTextField!
override func controlTextDidChange(obj: NSNotification) {
if self.textField.stringValue.characters.count > 1 {
self.textField.stringValue = String(self.textField.stringValue.characters.last!)
}
}
}