2012-10-29 39 views
0

我想使用NSTextField的格式化程序插件(如下圖所示)將NSNumberFormatter連接到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 

enter image description here

我沒有得到任何錯誤,當我運行該程序,但格式不工作,因爲它應該。當我在文本字段中輸入一個十進制數時,它將向上取整,即13.8變成14.我無法將小數點全部輸入到文本字段中。

在Interface Builder中使用NSTextField with NSNumberFormatter時,我可以正確使用它。但我寧願通過代碼來完成此操作,以便對格式有更多的控制。

所以我想要做的是這樣的 - 子類NSNumberFormatter,將格式化程序連接到XIB中的文本字段,然後在用戶將數字輸入到數字格式化的文本字段中。

任何建議將有所幫助。

+0

你是否在IB中更改了Field Formatter的自定義類? –

+0

@GradyPlayer FieldFormatter是NSNumberFormatter的一個子類。 IB中的對象的類被設置爲FieldFormatter。這是你問的嗎? – wigging

+0

我真的不明白你怎麼能說它不應該如它應該如果你沒有重寫任何格式的方法......也許你的問題是重寫代碼中的formatterStyle但不是在IB,它可能會反序列化不同的鍵基於...不過,你真的有一個對象應該像父類一樣 –

回答

2

Alloc初始化您的格式程序,然後在您的文本字段上調用setFormatter:。

FieldFormatter *formatter = [[FieldFormatter alloc] init]; 
[myTextField setFormatter:formatter]; 

而且,如果你不是在IB做任何事的,你應該擺脫連接,並代表您FieldFormatter實例的藍色立方體的。

+0

但是,如果我擺脫藍色立方體對象,我如何將文本字段連接到我的FieldFormatter類? – wigging

+0

另外,我已經看到了使用NSNumberFormatter的'alloc init'例子,但是它們都沒有告訴你實際放置代碼的位置。我知道如何分配&初始化格式化程序,以及如何設置參數,但代碼屬於哪裏?在一個方法中,在一個委託中,哪裏? – wigging

+0

@Gavin,你分配init的代碼應該放在你的文本字段的IBAction的任何類中(不要忘記將FieldFormatter.h導入到該文件中),或者你可以將它放入applicationWillFinishLaunching方法中應用程序代表。就連接而言,這就是setFormatter:方法的作用,除了爲文本字段提供IBOutlet之外,您不需要在IB中執行任何操作。 – rdelmar

相關問題