2012-05-09 28 views
16

Có cách nào để đặt người quan sát trên thuộc tính UIImageView.image, vì vậy tôi có thể được thông báo về thời điểm tài sản đã bị thay đổi không? Có lẽ với NSNotification? Tôi sẽ đi đâu để tới đó?Có cách nào để nhận thông báo khi thuộc tính UIImageView.image của tôi thay đổi không?

Tôi có một số lượng lớn UIImageViews, vì vậy tôi cần phải biết thay đổi nào cũng xảy ra.

Làm cách nào để thực hiện việc này? Cảm ơn.

Trả lời

20

Điều này được gọi là Quan sát giá trị khóa. Bất kỳ đối tượng nào tuân thủ Mã hóa giá trị khóa đều có thể được quan sát và điều này bao gồm các đối tượng có thuộc tính. Hãy đọc số this programming guide về cách thức hoạt động của KVO và cách sử dụng nó. Dưới đây là một ví dụ ngắn (từ chối trách nhiệm: nó có thể không hoạt động)

- (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

đừng quên để loại bỏ quan sát viên trong '-dealloc', như thế này:' [IMAGExem removeObserver: tự forKeyPath: @ "hình ảnh"]; ' –

Các vấn đề liên quan