addSubview 到特定的 uitableviewcell 上选择

Posted

技术标签:

【中文标题】addSubview 到特定的 uitableviewcell 上选择【英文标题】:addSubview to specific uitableviewcell on select 【发布时间】:2012-01-27 21:10:58 【问题描述】:

我有一个 tableview,我想在它被选中的行的单元格的 contentView 中添加一个 imageview。

这是我当前的代码,当我单击任何单元格时,它只会将 imageView 添加到最后一行而不是我单击的行。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    playIcon = [[UIImageView alloc]initWithFrame:CGRectMake(20, 22, 9, 12)];
    UIImage *image = [UIImage imageNamed: @"cell_play.png"];
    [playIcon setImage:image];
    [cell.contentView addSubview:playIcon];

【问题讨论】:

您没有显示cell 是如何声明/初始化的。我会 NSLog 它以确保它是有效的......最好使用- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath 【参考方案1】:

你可以这样做

[[tableView cellForRowAtIndexPath:indexPath] addSubview:playIcon];

【讨论】:

【参考方案2】:

首先,您没有在特定行识别单元格。由于您的编译器没有抱怨,因此我假设该单元格是 ivar。它指向它所指向的最后一个单元格,很可能是表格中的最后一个单元格。

您必须注意不要在 UITableview 方法之外设置单元格的内容,包括 UITableView 方法 cellForRowAtIndexPath:`。这在我最近提供的答案at this link 中有描述。

因此,如果您查看了该答案,您会读到 tableview 方法确保即使在 tableview 滚动并且单元格出现和消失时也正确呈现单元格。我建议您使用某种标记或属性设置数据源,您可以使用这些标记或属性来查看该图像是否需要存在。这样,即使您滚动单元格,它也会在那里消失并重新出现。

【讨论】:

抱歉,“不要在 UITableview 方法之外设置单元格的内容”是完全错误的。在谈论重新加载单元格时,Apple 文档说如果您可以仅更新单元格视图,请执行此操作而不是重新加载。某些类型的附件(不是 UIViews 的东西)不一定会更新,但简单的视图层次结构应该没问题。 我没有说要重新加载。进行重新加载的机制与我提出的观点无关。将单元格更新放入 cellForRowAtIndexPath: 方法(或通过源自那里的方法调用)可确保在渲染单元格时,同时正确渲染内容。这可能是由于程序员的代码显式调用了重新加载方法之一而发生的,但它也确保在用户滚动表格时呈现内容是正确的。这是因为 tableView 管理重新加载单元格的需要。 很抱歉。我试图参考 Apple 文档,但我无法将手指放在硬参考上:它就在他们谈论重新加载的地方附近(尽管我意识到这不是重新加载案例。)我只是想指出一个 UITableViewCell 是一个 UIView 并且所有正常的 UIView 方法都适用于它们。 没问题。如果你是投反对票的人,那么你能撤消它吗? 对不起,但我认为我们仍然不同意。我认为您是说他不应该在didSelectRowAtIndexPath 中添加子视图,这完全没问题。更改editingAccessoryType 之类的内容似乎有问题,但添加子视图不是问题。【参考方案3】:

在 Swift 2.0 中使用 UIcollectionView 和 UItableviewcell 为我工作:

CV_Posts.cellForItemAtIndexPath(index)?.addSubview(imag_curtir)

【讨论】:

以上是关于addSubview 到特定的 uitableviewcell 上选择的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIImageView 放置在子视图的特定区域中

addSubview 和 addArrangedSubview 不显示内容

将视图控制器添加到 uiwindow addsubview

如何在一行代码中将多个子视图添加到我的 iOS 视图中? (也许通过“monkeypatching”一个 `addSubviews` 实例方法到 UIView?)

使用addSubview将UIView移动到其他UIView中

正确使用 addSubView?