用KVO来监听 UICollectionView

#pragma mark - KVO

- (void)p_registerObserve {

if (_myCollectionView) {

[_myCollectionView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:kCollectionViewContentSizeContext];

}

}

- (void)p_deregisterObserve {

// 这里不使用点语法触发懒加载,因为可能在这里才触发懒加载创建collectionView,此时还没有添加观察者

// 如果这时移除观察者很可能会造成崩溃

if (_myCollectionView) {

[_myCollectionView removeObserver:self forKeyPath:@"contentSize" context:kCollectionViewContentSizeContext];

}

}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {

if (context == kCollectionViewContentSizeContext) {

CGSize contentSize = [change[NSKeyValueChangeNewKey] CGSizeValue];

CGFloat width   = GET_SCREEN_WIDTH-(isPad?82:0);

self.myCollectionView.frame = CGRectMake(0, 0, width, contentSize.height);

self.baseTableView.tableFooterView = self.myCollectionView;

}

}

时间: 2024-10-11 17:02:28

用KVO来监听 UICollectionView的相关文章

手动设定实例变量的KVO实现监听

如果将一个对象设定成属性,这个属性是自动支持KVO的,如果这个对象是一个实例变量,那么,这个KVO是需要我们自己来实现的. 以下给出源码供君测试: Student.h 与 Student.m // // Student.h // SuperNotification // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <Foundation/Foundation.h> @interface Student : NSObje

Swift中KVO(监听)的使用方法及注意事项

---恢复内容开始--- 相信研究swift语言的开发者都多多少少了解或者精通Objective—C语言,熟练掌握Objective—C语言的开发者,在学习swift语言的过程中,是比较快速,而又轻松的.本人就是一位熟练掌握OC语言,后开始研究的swift.在学习swift语言的过程中,笔者建议有OC基础的开发者,在写swift的代码过程中,再写一下OC中的代码,二者相互比较,相信你能找到快速学会swift语言的方法.资深,有耐心和有天赋的开发者,相信能在一周左右,能够运用swift开发项目.其

KVO监听

Main.m #import "Children.h" #import "Nurse.h" int main(int argc, const char * argv[]) { Children *children = [[Children alloc] init]; Nurse *nurse = [[Nurse alloc] initWithChildren:children]; [[NSRunLoop currentRunLoop] run]; [children

KVO键值监听

KVO 键值监听:当我想知道一个对象的属性是否发生改变的时候 做出响应,就需要添加监听keypath 和 key的区别keypath会自动寻找子类的属性key只会寻找当前类的属性添加键值监听[person addObserver:self forKeyPath:@“属性” options:.....] 当键值发生改变的时候调用-(void)obserValueForKeyPath:(NSString ) 底层实现:运行的时候 创建一个当前类的子类,重写子类的set方法 系统 建立了一个子类,然后

ios中键值编码kvc和键值监听kvo的特性及详解

总结: kvc键值编码  1.就是在oc中可以对属性进行动态读写(以往都是自己赋值属性)           2. 如果方法属性的关键字和需要数据中的关键字相同的话                  3. 动态设置:setValue:属性值 forKey:属性名(用于简单的路径)/setValue:属性值 forKeyPath:属性名(用于复杂的路径)kvo键值监听  永久性的监听item属性值的改变,如果改变就从新设置             1.监听方法:[addObserver:self

【OC学习-34】通知NSNotification,类似于KVO,用于对象之间监听然后发通知提醒

通知其实和KVO类似,就是先在类A中设置通知,然后再类B中设置个监听这个通知的方法,当然可以通过这个通知方法可以传递一些参数,得到这个参数之后,一般是触发一个动作,此处举例就是触发输出一些内容而已. (1)在Child类中初始化一个实例变量为100,每次递减2,当小于90时候触发通知. //Child.h #import <Foundation/Foundation.h> @interface Child : NSObject @property(nonatomic,assign)NSInte

iOS: 使用KVO监听控制器中数组的变化

一.介绍: KVO是一种能动态监听到属性值的改变的方式,使用场景非常广泛,这里我只讲如何监听控制器ViewController中数组的变化. 二.了解: 首先我们应该知道KVO是不能直接监听控制器ViewController数组的变化的,需要将数组定义在模型中,然后控制器ViewController持有模型对象,通过该对象才能监听. 三.步骤: <1>在控制器ViewController类中定义一个模型类Model,并在该类中声明一个可变的数组属性modelArray并进行懒加载,其实它最终就

用KVO监听控件属性的改变(observeValueForKeyPath)

创建一个测试的UIButton #import "ViewController.h" @interface ViewController () @property(nonatomic, strong)UIButton *button; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.button = [[UIButton alloc] initWithFrame:CG

ios监听

1.ios中用来监听的方法 代理/通知/block/KVO(监听对象属性变化) 代理:一对一关系,不能用在单例模式?但是为什么不能用在单例模式呢?求解 通知:一对多,发生事件的时候发送通知 KVO:用来监听对象属性的变化(在监听frame时可能会出现问题,具体遇到问题后期我会上代码展示) 2.切记!!通知:发送通知的代码所在的线程,就是通知方法执行的线程!!! 使用的时候需要注意当我们发送了一个通知,想让监听这个通知的对象刷新UI界面,如果该通知不是在 [NSOperationQueue mai