4

サブクラスがあり、現在のスクロール位置に基づいて別の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ますか?

4

1 に答える 1

7

スクロール ビューのコンテンツ ビューに境界変更通知を送信するように指示し、NSViewBoundsDidChangeNotification をリッスンします。

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

Scroll View Programming Guideに記載されているように、次の方法で現在のスクロール位置を取得できます。

NSPoint currentScrollPosition = [[theScrollView contentView] bounds].origin;
于 2010-04-22T21:12:03.573 に答える