国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS 監聽回調機制KVO實例

2020-07-26 02:31:41
字體:
來源:轉載
供稿:網友

監聽某個對象,如果這個對象的數據發生變化,會發送給監聽者從而觸發回調函數

[self.bean addObserver:self forKeyPath:@"data" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];

這個就是注冊監聽,這個@“data”作為標識符方便回調函數辨認

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if([keyPath isEqualToString:@"data"]) {  self.label.text = [self.bean valueForKey:@"data"]; }}

這個就是回調函數,分辨是哪個對象發生變化,然后給與相應的處理

-(void)viewWillDisappear:(BOOL)animated{ [self.bean removeObserver:self forKeyPath:@"data"];}

既然有注冊監聽還記得解除監聽

以下是完整例子代碼

//// ViewController.m// First//// Created by shanreal-iOS on 17/10/16.// Copyright © 2017年 shanreal.LongZhenHao. All rights reserved.//#import "ViewController.h"#import "TestBean.h"@interface ViewController ()@property(nonatomic,strong)UILabel* label;@property(nonatomic,strong)UIButton* btn;@property(nonatomic,strong)TestBean* bean;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.bean = [[TestBean alloc]init]; [self.bean setValue:@"1" forKey:@"data"];  self.label = [[UILabel alloc]initWithFrame:CGRectMake(10, 30, 100, 30)]; self.label.textColor = [UIColor blackColor]; self.label.text = [self.bean valueForKey:@"data"]; [self.view addSubview:self.label];   self.btn = [[UIButton alloc] initWithFrame:CGRectMake(10, 100, 200, 30)]; [self.btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.btn setTitle:@"chanage data" forState:UIControlStateNormal]; [self.btn addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:self.btn]; }-(void)viewWillAppear:(BOOL)animated{ [self.bean addObserver:self forKeyPath:@"data" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]; }-(void)clickAction{ int data = [[self.bean valueForKey:@"data"] intValue]+1; self.bean.data = [NSString stringWithFormat:@"%d",data];}-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if([keyPath isEqualToString:@"data"]) {  self.label.text = [self.bean valueForKey:@"data"]; }}-(void)viewWillDisappear:(BOOL)animated{ [self.bean removeObserver:self forKeyPath:@"data"];}@end#import <Foundation/Foundation.h>@interface TestBean : NSObject{ NSString* data;}@property(nonatomic,assign)int id;@property(nonatomic,strong)NSString* data;@end#import "TestBean.h"@implementation TestBean@end

以上這篇iOS 監聽回調機制KVO實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊川县| 陆川县| 阿合奇县| 自贡市| 萨迦县| 瑞丽市| 富平县| 保德县| 禄劝| 庄河市| 禹城市| 株洲市| 民丰县| 湟源县| 新兴县| 德阳市| 乌鲁木齐县| 钦州市| 姜堰市| 江城| 崇左市| 台湾省| 黑龙江省| 吴旗县| 柳林县| 晴隆县| 通河县| 满城县| 壶关县| 邮箱| 隆德县| 阿勒泰市| 正安县| 台山市| 光泽县| 读书| 东港市| 陆川县| 上栗县| 天台县| 土默特右旗|