Objective c 将NSNumberFormatter连接到NSTextfield
我正在尝试使用NSTextfield的格式化程序出口将NSNumberFormatter连接到NSTextfield(如下图所示)。我的格式化程序子类如下所示:Objective c 将NSNumberFormatter连接到NSTextfield,objective-c,cocoa,nstextfield,nsnumberformatter,Objective C,Cocoa,Nstextfield,Nsnumberformatter,我正在尝试使用NSTextfield的格式化程序出口将NSNumberFormatter连接到NSTextfield(如下图所示)。我的格式化程序子类如下所示: #import <Foundation/Foundation.h> @interface FieldFormatter : NSNumberFormatter @end #import "FieldFormatter.h" @implementation FieldFormatter - (NSNumberForm
#import <Foundation/Foundation.h>
@interface FieldFormatter : NSNumberFormatter
@end
#import "FieldFormatter.h"
@implementation FieldFormatter
- (NSNumberFormatterBehavior)formatterBehavior {
return NSNumberFormatterBehavior10_4;
}
- (NSNumberFormatterStyle)numberStyle {
return NSNumberFormatterDecimalStyle;
}
@end
#导入
@接口字段格式化程序:NSNumberFormatter
@结束
#导入“FieldFormatter.h”
@实现字段格式化程序
-(NSNumberFormatterBehavior)格式化程序行为{
返回NSNumberFormatterBehavior10_4;
}
-(NSNumberFormatterStyle)数字样式{
返回NSNumberFormatterDecimalStyle;
}
@结束
我在运行程序时没有收到错误,但是格式化程序没有正常工作。当我在文本字段中键入一个小数时,它会向上取整,即13.8变为14。我根本无法在文本字段中输入小数
FieldFormatter *formatter = [[FieldFormatter alloc] init];
[myTextField setFormatter:formatter];
在Interface Builder中使用带有NSNumberFormatter的NSTextField时,我可以使其正常工作。但是我更愿意通过代码来实现这一点,这样我就可以对格式有更多的控制
所以我想做的是-
子类NSNumberFormatter,将格式化程序连接到XIB中的文本字段,然后在用户向文本字段输入一个数字后,该数字被格式化
任何建议都会很有帮助。Alloc init您的格式化程序,然后在您的文本字段上调用setFormatter:
FieldFormatter *formatter = [[FieldFormatter alloc] init];
[myTextField setFormatter:formatter];
而且,如果您在IB中没有对它做任何操作,您应该去掉该连接和表示FieldFormatter实例的蓝色立方体。您在IB中更改了Field Formatter的自定义类吗?@GradyPlayer FieldFormatter是NSNumberFormatter的子类。IB中对象的类设置为FieldFormatter。这就是你要问的吗?我真的不明白如果你没有重写任何格式化方法,你怎么能说它没有正常工作。。。也许您的问题在于重写代码中的formatterStyle而不是IB中的formatterStyle,它可能会基于此对不同的键进行反序列化。。。但是你确实有一个对象,它的行为应该和父对象一样class@GradyPlayer我完全不明白这一点,NSNumberFormatter的文档也没有帮助。@GradyPlayer请看我更新问题的最后几行。但是如果我去掉蓝色立方体对象,我如何将文本字段连接到FieldFormatter类?还有,我已经看到了使用NSNumberFormatter的alloc init
示例,但是没有一个示例告诉您实际将代码放在哪里。我了解如何分配和初始化格式化程序以及如何设置参数,但代码属于哪里?在一个方法中,在一个委托中,where?@Gavin,您将格式化程序alloc init的代码应该放在文本字段具有iAction的任何类中(不要忘记将FieldFormatter.h导入该文件),或者您可以将其放在app委托中的applicationWillFinishLaunching方法中。至于连接它,这就是setFormatter:method所做的,您不需要在IB中做任何事情,只需要为您的文本字段提供一个IBOutlet。谢谢,这就回答了我现在的问题。我的下一步是将几个文本字段绑定在一起,根据一个文本字段的输入自动更新其他文本字段。如果这不起作用,那么我将发布一个单独的问题。