码迷,mamicode.com
首页 > 移动开发 > 详细

iOS KVO的实现

时间:2015-07-01 17:28:19      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

kvo听说过,之前一直没怎么用,最近用到啦,就学习了一下。

demo介绍:有俩个viewcontroller(a和b),b里有个定时器和一个button,b push到a,a里的textview和label来展示b里属性str变化的值。

代码:

bController.m

@property (strong,nonatomic)aController * aView;

@property (assign,nonatomic)int str;

 

- (void)viewDidLoad {

    [super viewDidLoad];

    self.aView=[[aController alloc]init];

    self.str=0;

 

    UIButton * btn=[UIButton buttonWithType:UIButtonTypeCustom];

    btn.frame=CGRectMake(100, 100, 100, 100);

    [btn setTitle:@"push" forState:UIControlStateNormal];

    [btn setBackgroundColor:[UIColor orangeColor]];

    [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [btn addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn];

    

    [self addObserver:self.aView forKeyPath:@"str" options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:nil];

}

 

//实现监听

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

    if ([keyPath isEqual:@"str"]) {

        NSLog(@"new str: %@",[change objectForKey:@"new"]);

        NSLog(@"old str: %@",[change objectForKey:@"old"]);

    }

}

 

-(void)push

    NSTimer *myTimer = [NSTimer  timerWithTimeInterval:1.0 target:self selector:@selector(timerFired)userInfo:nil repeats:YES];

    [[NSRunLoop  currentRunLoop] addTimer:myTimer forMode:NSDefaultRunLoopMode];

 

    self.aView.str=self.str;

    [self.navigationController pushViewController:self.aView animated:YES];

}

 

-(void)timerFired

{

    self.str++;

}

 

aController.h

@property (assign,nonatomic)int str;

aController.m

@property (strong,nonatomic)UITextView * textView;

@property (strong,nonatomic)UILabel * label;

 

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor=[UIColor orangeColor];

 

    [self addObserver:self forKeyPath:@"str" options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:nil];

 

    UITextView * textView=[[UITextView alloc]initWithFrame:CGRectMake(10, 100, 300, 200)];

    textView.backgroundColor=[UIColor whiteColor];

    textView.textColor=[UIColor blackColor];

    textView.editable=NO;

    self.textView=textView;

    [self.view addSubview:textView];

 

    UILabel * label=[[UILabel alloc]init];

    label.frame=CGRectMake(100, CGRectGetMaxY(textView.frame)+20, 100, 20);

    label.backgroundColor=[UIColor orangeColor];

    self.label=label;

    [self.view addSubview:label];

}

 

//实现监听

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

    if ([keyPath isEqual:@"str"]) {

        [self writeToLog:[NSString stringWithFormat:@"%@",[change objectForKey:@"new"]]]; 

        [self.label setText:[NSString stringWithFormat:@"%@",[change objectForKey:@"new"]]];

    }

}

-(void)writeToLog:(NSString *)info{

    static unsigned int count = 0;

    [self.textView setText:[NSString stringWithFormat:@"[ %d ]  %@\r\n%@",count,info,self.textView.text]];

    count++;

}

iOS KVO的实现

标签:

原文地址:http://www.cnblogs.com/tongyuling/p/4613483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!