国产探花免费观看_亚洲丰满少妇自慰呻吟_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實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瑞丽市| 鄱阳县| 湘潭市| 博客| 平潭县| 云阳县| 云龙县| 河曲县| 哈尔滨市| 海阳市| 汉川市| 巴中市| 深水埗区| 庄河市| 渝中区| 黄冈市| 石楼县| 武定县| 麻栗坡县| 抚顺市| 丰城市| 六枝特区| 虞城县| 炉霍县| 裕民县| 林西县| 保定市| 太仆寺旗| 喀喇沁旗| 安福县| 蓝山县| 西平县| 郓城县| 嘉鱼县| 漳浦县| 华亭县| 庆元县| 罗源县| 瓦房店市| 大连市| 克拉玛依市|