在 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!)
}
}
}
如何将多个 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!)
}
}
}