在 Swift 的 NSTextfield 中设置最大字符数(为一个)

Set maximum characters (to one) in a NSTextfield in Swift

如何将多个 NSTextfields(OSX cocoa 应用程序,而非 iOS)中的最大字符数设置为 Swift 中的一个?

请解释如何去做,因为在 OSX 应用程序开发方面我是一个完全的新手,因此我不理解像 "Use NSFormatter" 这样的简短答案,因为我没有了解它是什么以及如何实现它。喜欢例子

您无需限制用户输入的字符,只需查看输入的第一个字符即可。事实上,它可能更好,因为您将始终必须处理可能的用户错误。如果您愿意,可以通过获取 characters.count 发出他们输入过多的警报。如果他们根本不回答,您可能需要提醒。如果您使用 1 个 NSTextField 和一个按钮设置故事板并将它们连接起来,下面的代码将按原样工作。如果您有多个文本字段,例如多项选择测试,只需以相同方式设置所有文本字段即可。

import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var firstLetter: NSTextField!

根据需要添加任意数量的文本字段:

@IBOutlet 弱变量 secondLetter: NSTextField!

@IBOutlet 弱变量 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!)
        }
    }
}