获取键值监听到的值

来源:互联网 发布:如何恢复电脑网络设置 编辑:程序博客网 时间:2024/06/04 01:12

本文中我是想让一个collectionview内容变化时高度跟随变化,第二步取值时是需要注意的

1.监听

[selectedColl addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

2.实现observeValueForKeyPath方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {    NSLog(@"keyPath:%@ object:%@ change%@ context%@", keyPath, object, change, context);    //NSConcreteValue    id value = [object valueForKey:keyPath];    NSAssert([value isKindOfClass:[NSValue class]],             @"监听到的value不是NSValue类型");    NSAssert(strcmp(@encode(CGSize), [value objCType]) == 0,             @"监听到的value不是CGSize类型");    //取出value    CGSize unwrappedValue;    [value getValue:&unwrappedValue];    selectedH.constant = unwrappedValue.height;}

取值方法来自于https://stackoverflow.com/questions/4615966/what-is-an-nsconcretevalue-and-how-do-i-extract-its-value


3.页面销毁时移除监听

- (void)dealloc {    [selectedColl removeObserver:self forKeyPath:@"contentSize"];    NSLog(@"页面销毁");}


原创粉丝点击