OSX Cocoa - Как проверить изменения в нескольких NSTextFields

Я пытаюсь проверить изменения в некоторых NSTextFields.

Я использую:

- (void)controlTextDidEndEditing:(NSNotification *)notification {

    if ([notification object] == field1) 
        NSLog(@"field1: stringValue == %@", [field1 stringValue]);

    if ([notification object] == field2) 
        NSLog(@"field2: stringValue == %@", [field2 stringValue]);

    if ([notification object] == field3)
        NSLog(@"field3: stringValue == %@", [field3 stringValue]);

}

Это работает, но мне интересно, есть ли лучший способ. Спасибо

2 ответа

Решение

Это вполне нормально.

field1 и т. д. Я ожидаю, что будут торговые точки.

Вы можете сделать только шаг лучше:

- (void)controlTextDidEndEditing:(NSNotification *)notification {

    if ([notification object] == field1) 
        NSLog(@"field1: stringValue == %@", [field1 stringValue]);

    else if ([notification object] == field2) 
        NSLog(@"field2: stringValue == %@", [field2 stringValue]);

    else if ([notification object] == field3)
        NSLog(@"field3: stringValue == %@", [field3 stringValue]);

}

Вы можете использовать Key-Value-Observing (KVO) для отслеживания любых изменений значений.

[field1 addObserver:self
         forKeyPath:@"text"
             options:(NSKeyValueObservingOptionNew |
                        NSKeyValueObservingOptionOld)
                context:NULL];

Вам нужно будет реализовать метод в обозревателе:

- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context {

if ([keyPath isEqual:@"text"]) {
      if ( [object isMemberOfClass: [//class of object you have passed //]]){
         //project class you are processing and then use  a log
         NSLog(@"object: stringValue == %@", [field2 stringValue]);
      }

}
/*
 Be sure to call the superclass's implementation *if it implements it*.
 NSObject does not implement the method.
 */
[super observeValueForKeyPath:keyPath
                     ofObject:object
                       change:change
                       context:context];

}

Другие вопросы по тегам