Objective c 将NSNumberFormatter与多个NSTextFields一起使用
我有几个相互绑定的文本字段,它们根据顶部文本字段中的值不断更新,请参见下面的应用程序屏幕截图。我试图使用NSNumberFormatter根据文本字段中字符串的长度格式化每个文本字段中的值。如果字符串太长,那么我希望格式化程序样式切换到Scientific。我正在使用IBAction来alloc init数字格式化程序 我知道有-voidcontrolTextDidChange:NSNotification*obj,但这只适用于活动的NSTextField;我需要其他文本字段也被格式化为其值的变化 如何在不必为每个文本字段设置IBOutlet的情况下实现这一点 我的格式化程序类:Objective c 将NSNumberFormatter与多个NSTextFields一起使用,objective-c,cocoa-bindings,nstextfield,nsnumberformatter,Objective C,Cocoa Bindings,Nstextfield,Nsnumberformatter,我有几个相互绑定的文本字段,它们根据顶部文本字段中的值不断更新,请参见下面的应用程序屏幕截图。我试图使用NSNumberFormatter根据文本字段中字符串的长度格式化每个文本字段中的值。如果字符串太长,那么我希望格式化程序样式切换到Scientific。我正在使用IBAction来alloc init数字格式化程序 我知道有-voidcontrolTextDidChange:NSNotification*obj,但这只适用于活动的NSTextField;我需要其他文本字段也被格式化为其值的变
#import "FormatterObject.h"
@interface FormatterObject ()
@property (weak) IBOutlet NSTextField *textField;
@property double numA, numB, numC;
@end
@implementation FormatterObject
- (IBAction)chooseFormatter:(id)sender {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setThousandSeparator:@","];
[formatter setMaximumFractionDigits:6];
if ( [[_textField stringValue] length] < 10) {
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[_textField setFormatter:formatter];
}
else {
[formatter setNumberStyle:NSNumberFormatterScientificStyle];
[_textField setFormatter:formatter];
}
formatter = nil;
}
+ (NSSet *)keyPathsForValuesAffectingNumB {
return [NSSet setWithObject:@"numA"];
}
+ (NSSet *)keyPathsForValuesAffectingNumC {
return [NSSet setWithObject:@"numA"];
}
- (void)setNumB:(double)theNumB {
[self setNumA:theNumB * 1000];
}
- (double)numB {
return [self numA] / 1000;
}
- (void)setNumC:(double)theNumC {
[self setNumA:theNumC * 1000000];
}
- (double)numC {
return [self numA] / 1000000;
}
- (void)setNilValueForKey:(NSString*)key {
if ([key isEqualToString:@"numA"]) return [self setNumA: 0];
if ([key isEqualToString:@"numB"]) return [self setNumB: 0];
if ([key isEqualToString:@"numC"]) return [self setNumC: 0];
[super setNilValueForKey:key];
}
@end
下面是我的应用程序的外观:
下面是每个文本字段的绑定:
您好,加文,您可以签出-BOOLtextFieldShouldEndEditing:UITextField*textField。