2017-12-27 23 views
0

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 
+0

あなたはcontrolTextDidChangeを正しく使用していません。 –

+0

部分文字列で何をしたいですか?ユーザーが「900」と入力しているときに「9」を処理しますか? – Willeke

+0

@Willekeたとえば、ユーザータイプ '9'の場合、 '9'で始まる結果セットを表示する場合など、ユーザータイプとしてデータセットをフィルタリングしようとしています。 @El Tomato私は 'controlTextDidChangeが正しく'使用していないという意味ですか?詳しく教えてください。 – cha77a

答えて

0

あなたはfield editorから文字列を取得することができ、NSTextView。通知のuserinfoからフィールドエディタを取得できます。

controlTextDidChange

このメソッドが呼び出されたときに、テキストフィールド又はフォームの変更などコントロールのテキスト。コントロールはtextDidChangeNotification通知をポストし、コントロールのデリゲートがこのメソッドを実装している場合、自動的に通知を受け取るように登録されます。 @ "NSFieldEditor"キーを使用して、通知オブジェクトのuserInfoディクショナリからフィールドエディタを取得します。

関連する問題