Как наблюдать изменения NSScroller? - PullRequest
4 голосов
/ 22 апреля 2010

У меня есть подкласс NSScrollView, и я хотел бы обновить еще один NSView на основе текущей позиции прокрутки.Я попробовал KVC-наблюдение за value из [self horizontalScroller], но это никогда не вызывается.

// In awakeFromNib
[[self horizontalScroller] addObserver:self
                            forKeyPath:@"value"
                               options:NSKeyValueObservingOptionNew
                               context:NULL];

// Later in the file
- (void)observeValueForKeyPath:(NSString *)keyPath 
                  ofObject:(id)object 
                    change:(NSDictionary *)change 
                   context:(void *)context {
    if (object == [self horizontalScroller] && [keyPath isEqualToString:@"value"]) {
        // This never gets called
    }
}

Вы видите ошибку в моих рассуждениях или знаете лучший способ наблюдения прокрутки NSScrollview

1 Ответ

7 голосов
/ 23 апреля 2010

Сообщите представлению содержимого представления прокрутки отправлять уведомления об изменениях границ, затем прослушайте NSViewBoundsDidChangeNotification.

[[aScrollView contentView] setPostsBoundsChangedNotifications:YES];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(boundsDidChangeNotification:)
                                             name:NSViewBoundsDidChangeNotification
                                           object:[scrollView contentView]];

Как указано в Руководстве по программированию с прокруткой , вы можете получить текущую позицию прокрутки следующим образом:

NSPoint currentScrollPosition = [[theScrollView contentView] bounds].origin;
...