在controlTextDidChange方法中使用自定义NSFormatter访问NSTextField的`stringValue`使其不可编辑。

我对here & here中描述的文本字段具有自定义NSFormatter。我也有这个textfield的代表,并且我正从代表方法controlTextDidChange:访问stringValue。有了这段代码,当我尝试编辑文本字段时,它不断地从NSFormatter重置它的值,并使其不可编辑。在controlTextDidChange方法中使用自定义NSFormatter访问NSTextField的`stringValue`使其不可编辑。

CustomFormatter.m

@implementation CustomFormatter 

- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error {

float floatResult;

NSScanner *scanner;

BOOL returnValue = NO;

scanner = [NSScanner scannerWithString: string];

[scanner scanString: @"$" intoString: NULL]; // ignore return value

if ([scanner scanFloat:&floatResult] && ([scanner isAtEnd])) {

returnValue = YES;

if (obj) {

*obj = [NSNumber numberWithFloat:floatResult];

}

} else {

if (error) {

*error = NSLocalizedString(@"Couldn’t convert to float", @"Error converting");

}

}

return returnValue;

}

- (NSString *)stringForObjectValue:(id)anObject {

if (![anObject isKindOfClass:[NSNumber class]]) {

return nil;

}

return [NSString stringWithFormat:@"$%.2f", [anObject floatValue]];

}

@end

MyDelegate.m

@interface MyController() <NSTextFieldDelegate> 

@property (weak) IBOutlet NSTextField *text1;

@end

@implementation MyController

- (void)viewDidLoad {

[super viewDidLoad];

// Do view setup here.

}

- (void)controlTextDidChange:(NSNotification *)obj {

NSLog(@"%@",[self.text1 stringValue]);

}

@end

回答:

你可以从field editor字符串,一个NSTextView。您可以从通知的用户信息中获取字段编辑器。

controlTextDidChange

被调用此方法时文本在控制如文本字段或形式的变化。控件发布了一个textDidChangeNotification通知,并且如果控件的委托实现此方法,它将自动注册以接收通知。使用键“NSFieldEditor”从通知对象的userInfo字典中获取字段编辑器。

以上是 在controlTextDidChange方法中使用自定义NSFormatter访问NSTextField的`stringValue`使其不可编辑。 的全部内容, 来源链接: utcz.com/qa/266884.html

回到顶部