0

我正在平移 UITableViewCell contentView,如下面的代码所示。我想知道正在移动的 UITableViewCell contentView 后面存在的视图是什么?

我问的原因是因为我想改变这个“显示视图”的颜色。滑动单元格时,我想自定义每个 tableViewCell 下方的颜色。例如,如果您向左滑动第三行,您会在单元格后面看到蓝色。如果您向左滑动第 4 行,您会在单元格后面看到绿色。

- (void)panGestureRecognizer:(UIPanGestureRecognizer *)recognizer {

    //...

    if ((recognizer.state == UIGestureRecognizerStateBegan
         || recognizer.state == UIGestureRecognizerStateChanged)
        && [recognizer numberOfTouches] > 0) {

        CGPoint location1 = [recognizer locationOfTouch:0 inView:self.tableView];
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location1];           
        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

        CGPoint translation = [recognizer translationInView:self.tableView];
        cell.contentView.frame = CGRectOffset(cell.contentView.bounds, translation.x, 0);
    }

    //...
}

我尝试的一件事是创建一个 UIView 并将其添加到 contentView 后面的单元格中。这行得通,但并不令我满意。如果您使用 UITableViewRowAnimationLeft 输入代码以动画方式删除单元格,则背景颜色将随着单元格向左移动。这是有道理的,因为当动画将单元格移出以删除它时,我创建的背景视图会随着整个单元格一起移动。我想要的行为是背景颜色实际上位于单元格后面,因此在删除动画中移动单元格时它不会移动。

以下代码是我如何将背景视图添加到单元格并将其放在 contentView 下方。

[cell.contentView setBackgroundColor:[UIColor whiteColor]];

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.tableView.rowHeight)];
view.backgroundColor = [UIColor redColor];
[cell addSubview:view];  
[cell bringSubviewToFront:cell.contentView];
4

1 回答 1

1

啊哈!

我找到了一个优雅而美妙的解决方案。我高兴得发抖。

我在 cell.contentView 的右侧添加了另一个视图,其中包含我想要的背景颜色。现在,当您滑动单元格时,rightSideView 会随之拉动,因此看起来就像是正在显示的视图。(现在如果你想把内容放在那里,这对另一个人来说是另一个复杂的事情......我不这样做)我想做的就是让每个单元格能够有不同的显示颜色。耶!请注意,您必须使框架超长(即 500),以便删除的滑动看起来正确。

这是我的代码。

UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(320, 0, 500, self.tableView.rowHeight)];
label.backgroundColor = [UIColor redColor];
[cell.contentView addSubview:label];
于 2013-02-20T21:23:57.350 回答