2013-03-18 74 views
1

我在Xcode和MacOS应用程序的新手。请让我帮忙。我无法理解如何编写操作(或事件我不知道)创建限制字符集并检查兼容字符(0-9,e,。)上的NSTextField。我读了如何创建字符集(NSCharacterSet),但不能接下来需要什么。我想禁止在我的NSTextField上输入错误的字符。如何在Objective-C中处理NSTextField和其他事件的键盘事件?像例子。NSTextField字符集限制

回答

3

我会在textField上放一个NSFormatter。这是可可方式:d

textField.formatter = myFormatter;

..例如一个NSNumberFormatter或者如果需要的话一个自定义

看到

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextField_Class/Reference/Reference.html

+0

是啊,它的好,但用户可以输入错误的字符在文本字段:(我认为需要使用代表解决这个任务。知道:(。 – amigo 2013-03-19 12:36:26

+0

我正确理解委托自动工作? – amigo 2013-03-19 12:38:18

+0

teftField.delegate = self。然后实现NSTextFieldDelegate(它的一个或多个功能) – 2013-03-19 13:11:16

1

我在Cocoadev上发现了一篇文章,可以帮助你。 (http://lists.apple.com/archives/cocoa-dev/2006/Aug/msg01492.html

你要的注册通知时通知文本的变化,例如:

[[NSNotificationCenter defaultCenter] addObserver: self 
    selector: @selector(textDidChange:) 
    name: NSControlTextDidChangeNotification 
    object: textField]; 

然后在您的textDidChange:方法(或任何你的名字),你可以修改输入。例如,为了确保大写:

[[textField setStringValue: [[textField stringValue] uppercaseString]]; 

如果你想限制的数字量,你可以只使用deleteCharactersInRange:的NSMutableString的方法。如果您想限制在文本字段中找到的文本类型,可以使用包含所有允许的字符的NSMutableCharacterSet,然后使用NSScanner的scanCharactersFromSet:intoString方法过滤掉不需要的字符。

+0

的作品,而只是实现委托比较容易:d – 2013-03-18 19:57:05

+0

是啊,我是那种不知道他们为什么通过'NSNotification'做的,而不是的代表。 – StilesCrisis 2013-03-18 19:57:57

+0

在OSX上,他们只是发送nsnotifications - 总是 - 代表总是第一个接收者,虽然 – 2013-03-18 19:58:59