2013-03-18 55 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