【发布时间】:2015-04-07 22:59:28
【问题描述】:
我正在制作一个具有以下特征的 NSTextField:
1) 仅允许整数值 (0-9)
2) 长度为 1 或 2 位数字
3) 最小值为 1,最大值为 99
4) 如果输入 0,该值应该变回 1
5)如果按下删除并且单元格完全清空,该值应更改为 1 并自动选择(高亮),以便用户可以简单地输入新值
我可以通过创建自定义格式化程序和委托来获得这种行为,但我想仅在自定义格式化程序中实现这一点(我想保持事情“简单”)。
这是我的代码:
在委托文件中:
- (void)controlTextDidChange:(NSNotification *)aNotification
{
if ([[txtfldSaveDuration stringValue] length]==0) {
[txtfldSaveDuration setStringValue:@"1"];
}
if ([[txtfldSaveDuration stringValue] isEqualToString:@"0"]) {
[txtfldSaveDuration setStringValue:@"1"];
}
}
在自定义格式化程序文件中:
@implementation OnlyIntegerValueFormatter
- (BOOL)isPartialStringValid:(NSString*)partialString newEditingString: (NSString**)newString errorDescription:(NSString**)error
{
// necessary otherwise can't delete (to select) the first character
if([partialString length] == 0) {
return YES;
}
// two integer max length (99)
if([partialString length] > 2) {
return NO;
}
// integers only
NSScanner* scanner = [NSScanner scannerWithString:partialString];
if(!([scanner scanInt:0] && [scanner isAtEnd])) {
NSBeep();
return NO;
}
return YES;
}
@end
如何简化?
【问题讨论】:
标签: xcode cocoa delegates nstextfield nsnumberformatter