【问题标题】:insertSubview:belowSubview: in UITableViewsinsertSubview:belowSubview: 在 UITableViews
【发布时间】:2012-02-27 03:25:57
【问题描述】:

我有一个UITableViewUITableViewCells 是可滑动的。滑动单元格时,我希望在该单元格下方可见(显示)视图。这是我的代码:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

_cellBack = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
_cellBack.backgroundColor = [UIColor whiteColor];
[self.tableView insertSubview:_cellBack belowSubview:cell];

for (int i = 0; i < [self.tableView subviews].count; i++) {
    UIView *v = [[self.tableView subviews] objectAtIndex:i];

    if ([v isEqual:_cellBack]) {
        NSLog(@"cellBack %d", i);
    }
    if ([v isEqual:cell]) {
        NSLog(@"cell %d", i);
    }
}

for 循环中,我检查视图的索引是否符合我的预期,并且确实如此; _cellBack 的索引比 cell 的索引小一。

当我用insertSubview:aboveSubview: 替换insertSubview:belowSubview: 调用时,它可以正常工作(尽管白色UIView 出现在滑动单元格上方),所以这不是没有正确分配_cellBack 的问题。我也试过insertSubview:atIndex:,但也没有用..

这可能是什么原因造成的?

谢谢!

【问题讨论】:

  • 您是否尝试 A) 在指定单元格下方(例如下方)插入新视图,以便您的新视图和表格单元格一层层叠加;或者您是否尝试 B) 为您的表格插入一个新行,这样如果表格在您的代码运行后的开头有三个单元格,它将有四个?
  • 我正在尝试将其添加到单元格下方。不过,这不是我要添加的新行。
  • 那么可能是您成功添加了子视图,但是由于它与表格单元格大小相同且位置相同,因此您看不到它,因为表格单元格位于顶部它并完全隐藏它?

标签: iphone objective-c ios uitableview uiview


【解决方案1】:

要使 SideSwipeTableView 示例在 ios7 和以前的版本上工作,只需将行更改为

[cell.superview insertSubview:self.sideSwipeView belowSubview:cell];

其他任何东西都会将后视图推到单元格顶部,并且您不会获得任何动画效果,动画发生在您的背景单元格后面!要检查这一点,请将单元格的偏移量更改为小于全屏,以检查您的单元格是否仍位于顶部,而背景确实位于下方。来自:

cell.frame = CGRectMake(direction == UISwipeGestureRecognizerDirectionRight ? cellFrame.size.width : -cellFrame.size.width, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height);  

cell.frame = CGRectMake(direction == UISwipeGestureRecognizerDirectionRight ? cellFrame.size.width/2 : -cellFrame.size.width/2, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height);

【讨论】:

    【解决方案2】:

    UITableView 已经有能力把东西放在单元格后面。这是单元格的backgroundView。您为什么不尝试这样做,以便您可以执行以下操作:

    cell.selectedBackgroundView = _cellBack;
    

    【讨论】:

      【解决方案3】:

      事实证明,如果我将它添加到另一个视图,代码会按预期工作。

      这是我添加它的地方:

          _cellBack = [[UIView alloc] initWithFrame:CGRectMake(0, cell.contentView.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
          _cellBack.backgroundColor = [UIColor whiteColor];
      
          [cell insertSubview:_cellBack belowSubview:cell.contentView];
      

      我仍然不确定为什么问题中的代码不起作用。来自this github accountSideSwipeTableView 的代码与我之前的代码相似,并且运行良好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多