我从我的一个名为 UIScrollView(Sample) 的类(uiscroll 视图的类别)中为我的一个名为 myClassA 的类(uiview 的子类)注册了一个观察者
@implementation UIScrollView (myClass)
// Register an observer
- (void)registerAsObserver {
[self addObserver:[self getMyClassA] forKeyPath:@"notification" options:NSKeyValueObservingOptionNew context:nil];
}
在 myClassA 中
@implementation myClassA
- (id)initWithFrame:(CGRect)frame {
if(self = [super initWithFrame:frame]) {
// Initialization goes here
}
return self;
}
#pragma mark - Receive notification of change
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
CGPoint newPoint = [[change objectForKey:NSKeyValueChangeNewKey] CGPointValue];
if ( [keyPath isEqualToString:@"notification"] ) {
[self doSomething:newPoint];
}
}
但是,似乎 myClassA 没有收到来自UIScrollView(myClass)
. google了之后,我发现原因是关键字forKeyPath。如果我把它改成contentOffset
,一切都像魅力一样。
在这里做了一个快速的研究,但仍然不明白为什么。