【问题标题】: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 方法。你不需要它。使用您将子视图添加到此自定义单元格的代码更新您的问题。
  • 我从不添加子视图,我只是将样式设置为编辑。

标签: ios objective-c uitableview


【解决方案1】:

subview2subview 的子视图,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。
猜你喜欢
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多