我们在做开发的时候,一般会有这么一个需求,点击按钮显示一个子view,子view里面有个关闭按钮,点击关闭按钮可以关闭目前的子view,但是很多人直接在显示按钮的点击事件里面直接添加,那么就会导致点击一次按钮添加一次view,view就会一直添加,图层越来越多,产生了bug,这种写法当然是错误的。
按钮点击事件直接添加
- (void)actionNoise {
self.dbDetailView = [[DBDetailView alloc] init];
[self.view addSubview:self.dbDetailView];
[self.dbDetailView makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
make.left.equalTo(28);
make.right.equalTo(-28);
}];
self.dbDetailView.layer.cornerRadius = 20;
self.dbDetailView.layer.masksToBounds = YES;
}
那么正确做法也很简单,就是在添加按钮点击事件里面加上一个判断:判断:判断当前子视图是否已添加到父视图上,如果没有添加到则添加.view有个判断方法:
A isDescendantOfView:B
//判断B是否已经addsubview了A,也就是B是否添加了A。
talk is cheap ,show me code
加上判断之后
- (void)actionNoise {
if (![self.dbDetailView isDescendantOfView:self.view]) {
self.dbDetailView = [[DBDetailView alloc] init];
[self.view addSubview:self.dbDetailView];
[self.dbDetailView makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
make.left.equalTo(28);
make.right.equalTo(-28);
}];
self.dbDetailView.layer.cornerRadius = 20;
self.dbDetailView.layer.masksToBounds = YES;
}
}
如此即可
网友评论