0

我真的在这个问题上停留了很长时间

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

在滑动时,我创建了我的UIControl课程并将其添加到我自己(单元格)中,到目前为止一切都很好。这是代码

[self addSubview:_statusView];

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

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

这是我想在动作中做的,我想UIControlself.subviews(单元格的子视图)中删除它,所以我将动作方法设置为这样

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

有人可以指出这段代码有什么问题吗?因为我真的不明白为什么添加到单元格的视图没有被删除。在我看来, subviews 属性从未包含我UIControl添加的内容。

4

2 回答 2

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];
}
于 2014-07-24T13:01:55.727 回答
1

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];
    }
}
于 2014-07-24T13:06:48.877 回答