我無法制作動態單位轉換器。我有兩個文本字段:一個用於「英寸」,另一個用於「腳」。我的目標是在輸入數字時將英寸轉換爲英尺,反之亦然。我希望動作發生動態,而不是當按下「Enter」或「Tab」按鈕時。動態更新NSTextField中的數字
我正在使用Number Formatter的NSTextField。所以我需要格式化程序在計算髮生時也可以工作。我已經嘗試了 - (void)controlTextDidChange方法,但格式化程序不能使用它。
請參閱下面的我的當前代碼,它不能動態工作。
#import <Foundation/Foundation.h>
@interface Convert : NSObject {
IBOutlet NSTextField *inches;
IBOutlet NSTextField *feet;
}
- (IBAction)textDidChange:(id)sender;
@end
和
#import "Convert.h"
@implementation Convert
- (IBAction)textDidChange:(id)sender {
if (sender == inches) {
float myInches = [inches floatValue];
[feet setFloatValue: (myInches/12)];
}
else if (sender == feet) {
float myFeet = [feet floatValue];
[inches setFloatValue: (myFeet*12)];
}
}
@end
誰能告訴我如何做到這一點,而不必按 「Enter」 或 「Tab」 鍵?
...現在嘗試使用替代的NSTextField NSForm的NSValueTransformer辦法...
#import <Foundation/Foundation.h>
@interface LengthConverter : NSValueTransformer
+ (Class)transformedValueClass;
+ (BOOL)allowsReverseTransformation;
- (id)transformedValue:(id)value;
- (id)reverseTransformedValue:(id)value;
@end
和
#import "LengthConverter.h"
@implementation LengthConverter
+ (Class)transformedValueClass {
return [NSNumber class];
}
+ (BOOL)allowsReverseTransformation {
return YES;
}
- (id)transformedValue:(id)value {
if (value == nil) return nil;
if (![value respondsToSelector: @selector(doubleValue)]) {
[NSException raise:NSInternalInconsistencyException format:@"Value does not respond",[value class]];
}
CGFloat inchesInputValue = [value doubleValue]; // handles NSString and NSNumber
CGFloat feetOutputValue = inchesInputValue/12;
return [NSNumber numberWithDouble: feetOutputValue];
}
- (id)reverseTransformedValue:(id)value {
if (value == nil) return nil;
if (![value respondsToSelector: @selector(doubleValue)]) {
[NSException raise:NSInternalInconsistencyException format:@"Value does not respond",[value class]];
}
CGFloat feetInputValue = [value doubleValue]; // handles NSString and NSNumber
CGFloat inchesOutputValue = feetInputValue * 12;
return [NSNumber numberWithDouble: inchesOutputValue];
}
@end
你能詳細說明我如何在我的代碼中實現NSValueTransformer嗎?我以前從未使用過它們。 – wigging 2012-02-01 02:55:53
@Gavin更新回答 – justin 2012-02-01 03:31:54
如何在綁定中聲明「模型關鍵路徑」? – wigging 2012-02-01 05:48:21