无法将删除子视图置于前面
Posted
技术标签:
【中文标题】无法将删除子视图置于前面【英文标题】:Can't bring delete subview to front 【发布时间】:2014-03-03 01:01:42 【问题描述】:我正在尝试将我的子视图放在前面,因为删除按钮一直消失。
@implementation MyCell : UITableViewCell
- (void)layoutSubviews
[super layoutSubviews];
for (UIView *subview in self.subviews)
for (UIView *subview2 in subview.subviews)
NSLog(@"HERE!");
if ([NSStringFromClass([subview2 class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"])
NSLog(@"got inside the if!");
[subview2 sendSubviewToBack:subview];
[subview bringSubviewToFront:subview2];
[self.superview bringSubviewToFront:subview2];
@end
我继承了 UITableViewCell。两个 NSLog 都在打印,所以我知道它已经进入了那里,但是我已经尝试了所有 3 种方法来将视图放在前面。任何想法为什么这不起作用?
【问题讨论】:
您需要将所有自定义单元格的自定义视图放在单元格的self.contentView
中,而不是直接放在self
中。
改为喜欢这个[self.contentview sendSubviewToBack:subview];
[self.contentview bringSubviewToFront:subview2];
[self.contentview bringSubviewToFront:subview2];
?
没有。添加子视图时,将它们添加到contentView
。那么这些代码都不需要了。
摆脱这个layoutSubviews
方法。你不需要它。使用您将子视图添加到此自定义单元格的代码更新您的问题。
我从不添加子视图,我只是将样式设置为编辑。
【参考方案1】:
subview2
是subview
的子视图,self
的子视图。 sendSubviewToBack:
或 bringSubviewToFront:
消息的接收者必须是作为参数给出的视图的父视图。因此,只有您拨打的第二个电话是有效的。正确的调用是
[self.superview bringSubviewToFront:self];
[self bringSubviewToFront:subview];
[subview bringSubviewToFront:subview2];
(sendSubviewToBack:
也是如此。)
至于您的实际问题,我无法从发布的代码中找出您正在使用的视图层次结构,但它似乎不正确。您可能不应该将自定义视图作为self
的直接子视图,而是作为self.contentView
的子视图(根据Apple's documentation)。
【讨论】:
两种方法都试过了,点击减号按钮后删除按钮仍然消失。 我的视图层次结构非常简单,只是一个填充了 MyCells 的 UITableView,它继承自 UITableViewCell。 如何更改单元格的父视图?在 cellForRowAtIndexPath 里面?或者其他地方会更好吗? @Inbl 您不会更改单元格的父视图,而是更改添加自定义单元格子视图的方式。 我认为我从来没有向我的自定义单元格添加子视图,我只是将编辑样式设置为 YES。以上是关于无法将删除子视图置于前面的主要内容,如果未能解决你的问题,请参考以下文章