here & hereに記載されているように私はカスタムテキストNSFormatter
を持っています。私もこのテキストフィールドの代理人を持っており、代理メソッド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'で始まる結果セットを表示する場合など、ユーザータイプとしてデータセットをフィルタリングしようとしています。 @El Tomato私は 'controlTextDidChangeが正しく'使用していないという意味ですか?詳しく教えてください。 – cha77a