iOS开发中的通知,代理,block是子对象在父对象进行回调的三种基本方法,而通知在多对象,跨层次的应用方面,拥有绝对的优势.
实际项目中需要父类对象(view),在不同的时刻,对子对象(redView)进行通知的添加与移除.那接收到通知时的响应方法,是写在父对象(view)还是子对象(redView)中呢?
- (void)viewDidLoad {
[super viewDidLoad];
ZDRedView *redView = [[ZDRedView alloc] initWithFrame:CGRectMake(10, 100, 300, 200)];
self.redV = redView;
[self.view addSubview:redView];
[[NSNotificationCenter defaultCenter] addObserver:redView selector:@selector(changeLabel) name:ChangeNotify object:nil];
}
- (void)changeLabel{
//处理通知
}
上面是我们通常的处理方式,但是在实际测试中,却需要将通知的响应方法changeLabel放在redVeiw中,才能被调用.如下所示:
//redView中的代码
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor redColor];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x, frame.origin.y + 10, frame.size.width - 20, 50)];
self.label = label;
label.textAlignment = NSTextAlignmentCenter;
[self addSubview:label];
label.text = @"刚开始";
}
return self;
}
- (void)changeLabel{
self.label.text = @"改变了";
self.label.backgroundColor = [UIColor greenColor];
}
下面是Demo地址:
https://github.com/zhudong10/SpecialNotify.git
您的点赞或关注都是对我的支持与鼓励~