平移 UITableViewCell 时显示啥视图?

Posted

技术标签:

【中文标题】平移 UITableViewCell 时显示啥视图?【英文标题】:What view is revealed when panning UITableViewCell?平移 UITableViewCell 时显示什么视图? 【发布时间】:2013-02-20 20:57:25 【问题描述】:

我正在平移 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];

【问题讨论】:

【参考方案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];

【讨论】:

以上是关于平移 UITableViewCell 时显示啥视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义滑动 UITableViewCell 时显示的删除按钮

UITableviewCell在ios中滚动时显示不正确

UITableViewCell 上的 UIPanGestureRecognizer 覆盖 UITableView 的滚动视图手势识别器

处理 UITableView 单元格上的平移手势

如何从 UITableViewCell 输入新视图? (当表格视图从 .plist 获取其信息时)

重新排序单元格时如何在 UITableViewcell 内容视图中添加图像?