KVO 简单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
KVO 监视对象的某一个属性变化
- (void)viewDidLoad {
    [super viewDidLoad];
    UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.frame];
    [self.view addSubview:tableView];
    tableView.delegate = self;
    tableView.dataSource = self;
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
    self.tableView = tableView;
//contengOffset是tableview的一个属性
    [self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
 
    }
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    if (object == _tableView && [keyPath isEqualToString:@"contentOffset"]){
        CGFloat offset = self.tableView.contentOffset.y;
        if (offset >40) {
            for (UIView*view in self.tableView.subviews) {
                if ([view isKindOfClass:[UITableViewCell class]]) {
                    view.backgroundColor = [UIColor redColor];
                }
            }
        }else{
            for (UIView*view in self.tableView.subviews) {
                if ([view isKindOfClass:[UITableViewCell class]]) {
                    view.backgroundColor = [UIColor whiteColor];
                }
            }
        }
    }
}
 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 100;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    return cell;
}
-(void)dealloc{
    [self.tableView removeObserver:self forKeyPath:@"contentOffset"];
 
}

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注