我真的被这个问题困扰了很长一段时间
我正试图将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];
}
}