Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将NSNumberFormatter连接到NSTextfield_Objective C_Cocoa_Nstextfield_Nsnumberformatter - Fatal编程技术网

Objective c 将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

我正在尝试使用NSTextfield的格式化程序出口将NSNumberFormatter连接到NSTextfield(如下图所示)。我的格式化程序子类如下所示:

#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。谢谢,这就回答了我现在的问题。我的下一步是将几个文本字段绑定在一起,根据一个文本字段的输入自动更新其他文本字段。如果这不起作用,那么我将发布一个单独的问题。