2012-05-09 2 views
16

Есть ли способ установить наблюдателя в свойстве UIImageView.image, поэтому я могу получить уведомление о том, когда свойство было изменено? Возможно, с NSNotification? Как мне это сделать?Есть ли способ получить уведомление, когда меняет свойство UIImageView.image?

У меня есть большое количество UIImageViews, поэтому мне нужно знать, в какой из них произошло изменение.

Как это сделать? Благодарю.

ответ

20

Это называется наблюдением за ключевыми значениями. Любой объект, совместимый с кодировкой по ключевым значениям, может быть замечен, и это включает объекты со свойствами. Прочитайте this programming guide о том, как работает KVO и как его использовать. Вот небольшой пример (отказ от ответственности: он не может работать)

- (id) init 
{ 
    self = [super init]; 
    if (!self) return nil; 

    // imageView is a UIImageView 
    [imageView addObserver:self 
       forKeyPath:@"image" 
        options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld 
        context:NULL]; 

    return self; 
} 

- (void) observeValueForKeyPath:(NSString *)path ofObject:(id) object change:(NSDictionary *) change context:(void *)context 
{ 
    // this method is used for all observations, so you need to make sure 
    // you are responding to the right one. 
    if (object == imageView && [path isEqualToString:@"image"]) 
    { 
     UIImage *newImage = [change objectForKey:NSKeyValueChangeNewKey]; 
     UIImage *oldImage = [change objectForKey:NSKeyValueChangeOldKey]; 

     // oldImage is the image *before* the property changed 
     // newImage is the image *after* the property changed 
    } 
} 
+1

не забудьте удалить наблюдателя в '-dealloc', как это:' [ImageView removeObserver: само forKeyPath: @ "образ"]; ' –

Смежные вопросы