从Superview中删除子视图



我真的被这个问题困扰了很长一段时间

我正试图将UIControl(最终是UIView(添加到UITableViewCell中,我在自己的类中有子类(我制作了一个自定义单元格(

在滑动时,我创建了UIControl类并将其添加到自己(单元格(中,到目前为止效果很好。这是代码

[self addSubview:_statusView];

但是,我在自定义单元格中为UIControl添加了一个目标操作,以便该单元格可以处理UIControl何时表示他已识别出touchDownEvent。

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

这是我想在操作中做的,我想从self.subviews(单元格的子视图(中删除UIControl,所以我将操作方法设置为这样的

- (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,如文档中所述:

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

所以你必须更换

[self addSubview:_statusView];

带有

[self.contentView addSubview:_statusView];

然后迭代contentView:的子视图

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

最新更新