0
我對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
你甚至沒有正確使用controlTextDidChange。 –
你想用部分字符串做什麼?你想在用戶輸入「900」時處理「9」嗎? – Willeke
@Willeke讓我們說我試圖過濾一個數據集作爲用戶輸入,例如當用戶鍵入'9'我想顯示一個以'9'開頭的結果集例如:900。 @El番茄你是什麼意思,我沒有正確使用'controlTextDidChange'?請詳細說明。 – cha77a