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];
}