在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!) 
     } 
    } 
}