在界面生成器中,我創建了一個文本框並將一個NSNumberFormatter粘貼到單元格中。但是,用戶仍然可以在文本框中輸入文本。有什麼方法可以將輸入限制爲僅使用接口生成器的數字?我認爲這是NSNumberFormatter的要點。如何強制NSTextField只允許數字?
0
A
回答
0
每個格式有這個方法:
- (BOOL) getObjectValue: (id*) object forString: (NSString*) string
errorDescription: (NSError**) error;
這是適用於所有的格式。
如果字符串無效,則返回false,並且作爲參數傳遞的對象(取消引用)將爲零。
因此,不要將數字格式化程序放到文本字段中,而要使用自己的格式化程序作爲實例變量。觀察實現委託協議的文本字段,以便在每次更改文本時都可以通知您。
然後調用此方法:
NSNumber* number;
BOOL success=[formatter getObjectValue: &number forString: [myTextField stringValue] errorDescription:nil];
此時如果成功是假的(或檢查數爲零),則在文本字段一個無效的字符串,這樣做是比較適合你的行動(也許刪除整個字符串,或者顯示0.0作爲值)。
也有另一種方法:
- (BOOL) isPartialStringValid : (NSString*) partialString: (NSString*) partialString
errorDescription: (NSString*) error;
這樣你就可以知道,如果部分字符串是valid.For例如用科學記數法「1E」是無效的,而且是部分有效,因爲用戶可能加1,它會變成「1e1」。
0
創建一個NSNumberFormatter子類並將其放入實現中。在您的代碼中,將YKKNumberFormatter設置爲NSTextField/UITextField的格式化程序。
@implementation YKKNumberFormatter
- (BOOL)isPartialStringValid:(NSString *)partialString newEditingString:(NSString **)newString errorDescription:(NSString **)error {
// Make sure we clear newString and error to ensure old values aren't being used
if (newString) { *newString = nil;}
if (error) {*error = nil;}
static NSCharacterSet *nonDecimalCharacters = nil;
if (nonDecimalCharacters == nil) {
nonDecimalCharacters = [[[NSCharacterSet decimalDigitCharacterSet] invertedSet] retain];
}
if ([partialString length] == 0) {
return YES; // The empty string is okay (the user might just be deleting everything and starting over)
} else if ([partialString rangeOfCharacterFromSet:nonDecimalCharacters].location != NSNotFound) {
return NO; // Non-decimal characters aren't cool!
}
return YES;
}
@end
相關問題
- 1. 如何只允許數字?
- 2. 強制JTextField字符串值,而DocumentFilter只允許數字
- 3. NSTextField - 僅允許使用強制觸摸進行編輯,Cocoa
- 4. 只允許數字字符
- 5. 如何強制mod_perl只允許每個連接一個進程?
- 6. autoTab並只允許數字
- 7. 只允許數字輸入
- 8. 強制網站允許選擇文字?
- 9. 如何只允許
- 10. 如何只允許文本框中的十進制數字
- 11. 只允許字母數字字符
- 12. 如何只允許-ZA-Z字符
- 13. 如何只允許輸入字母?
- 14. 如何強制NSTextField接受文本?
- 15. 只允許數字字符VBA
- 16. 只允許字母數字值
- 17. 只允許使用JavaScript輸入數字並允許複製和粘貼?
- 18. 如何只允許0-99.99
- 19. 如何只允許Android的
- 20. 如何只允許文本輸入的數字,但允許JavaScript的命令?
- 21. 只允許正十進制數
- 22. Knockout.js - 強制輸入是數字 - 允許點和逗號符號
- 23. 如何只允許使用JavaScript的Alpha數字字符
- 24. 只允許ASCII字符VBA
- 25. 只允許小寫字符
- 26. 只允許輸入字母
- 27. 只允許某些字符
- 28. 只允許8個字符
- 29. 如何強制Oracle數據庫只允許在其中的任何表格中插入ASCII字符?
- 30. 只允許兩個數字以JavaScript
見接受的答案爲[類似的問題(http://stackoverflow.com/questions/4652689/restrict-nstextfield-input-to-numeric-only-nsnumberformatter) – FluffulousChimp
搜索 「的NSTextField只有數字」,你會找到很多答案。 – rdelmar