从Superview中删除子视图

时间:2014-07-24 12:52:54

标签: ios uiview subview superview

我在这个问题上坚持了很长时间

我正在尝试将UIControl(最后是UIView)添加到我自己的类中有子类的UITableViewCell(我创建了一个自定义单元格)< / p>

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

[self addSubview:_statusView];

但是,我正在向自定义单元格中的UIControl添加目标操作,以便当UIControl表示他已识别出touchDownEvent时,单元格可以处理。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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];
    }
}