繁体   English   中英

从Superview中删除子视图

[英]Remove Subview from Superview

我确实在这个问题上停留了很长时间

我试图将UIControl (最后是UIView )添加到我自己的类中有子类的UITableViewCell (我创建了自定义单元格)

滑动后,我创建了我的UIControl类并将其添加到我自己(单元格)中,到目前为止一切顺利。 这是代码

[self addSubview:_statusView];

但是,我在自定义单元格中向我的UIControl添加了一个目标操作,以便当UIControl说他已经识别出touchDownEvent时,该单元格可以进行处理。

[self.statusView addTarget:self action:@selector(resetAll:) forControlEvents:UIControlEventTouchDown];

这就是我要在操作中执行的操作,我想从self.subviews (单元格的子视图)中删除该UIControl ,因此我将action方法设置为如下所示

- (void)resetAll:(id)sender
{
for (UIView *view in self.subviews) {
    if ([view isKindOfClass:[StatusView class]]) {
        [view removeFromSuperview];
    }
}
}

有人可以指出这段代码有什么问题吗? 因为我无法真正弄清楚为什么未删除添加到单元格的视图。 在我看来,subviews属性从不包含我添加的UIControl

- (void)resetAll:(id)sender
{
for (UIView *view in self.view.subviews) {
    if ([view isKindOfClass:[StatusView class]]) {
        [view removeFromSuperview];
    }
}
}

要么

- (void)resetAll:(id)sender
{
[sender removeFromSuperview];
}

UITableViewCell内部对其视图层次结构进行一些操作。 您应该将子视图添加到单元格本身,而不是添加到其contentView ,如docs中所述:

如果要超越预定义的样式,可以将子视图添加到单元格的contentView属性。

所以你必须更换

[self addSubview:_statusView];

[self.contentView addSubview:_statusView];

然后迭代contentView子视图:

for (UIView *view in self.contentView.subviews) {
    if ([view isKindOfClass:[StatusView class]]) {
        [view removeFromSuperview];
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM