美文网首页iOS经验总结
iOS开发之 判断当前子视图是否已添加到父视图上

iOS开发之 判断当前子视图是否已添加到父视图上

作者: 我是卖报的小行家 | 来源:发表于2021-09-26 10:33 被阅读0次

    我们在做开发的时候,一般会有这么一个需求,点击按钮显示一个子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;
        }
    }
    

    如此即可

    相关文章

      网友评论

        本文标题:iOS开发之 判断当前子视图是否已添加到父视图上

        本文链接:https://www.haomeiwen.com/subject/shkqnltx.html