访问现有的UITableViewCell

时间:2011-02-24 22:56:19

标签: ios animation uiview uitableview coordinates

这是一个不同的问题,但我认为错误并没有错,所以我调整了标题以反映我的想法。

我正在制作一个动画,它在普通UITableViewCell的cell.imageView中获取图像的副本,并将其移动到屏幕底部的标签栏,以模拟将项目放入购物车。我可以复制图像并将副本作为窗口的子视图放置,但我无法弄清楚如何获得原始图像的绝对位置,因此我可以将它放在顶部作为动画的起点。

图像始终显示在屏幕顶部,就像放置在0,0。

对于这个问题的无趣性质,我很确定我错过了一些非常明显的东西。

  

- (无效)的tableView:(UITableView的   *)tableView accessoryButtonTappedForRowWithIndexPath :( NSIndexPath   *)indexPath {

UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
UIImageView *originalImgView = cell.imageView;
UIImageView *img = [[[UIImageView alloc] initWithImage: cell.imageView.image] autorelease];

NSLog(@"Original %@", originalImgView.bounds);  // Shows "Original (null)" at runtime.
NSLog(@"Window Points %@", [self.view.window convertPoint:originalImgView.frame.origin toView:nil]);
NSLog(@"Cell Points: %@", cell.bounds);  // Shows "Original (null)" at runtime.

[img setFrame:CGRectMake( originalImgView.bounds.origin.x, originalImgView.bounds.origin.y ,
        cell.imageView.image.size.width, cell.imageView.image.size.height)];

[self.view.window addSubview:img];

NSLog(@"Selected Cell: %@", cell); // Shows cell info at run time, works
     

}

2 个答案:

答案 0 :(得分:5)

所以我这样做是错的。 我正在制作一个具有相同内容的新单元格,而不是使用当前单元格。我通过在创建单元格时向其添加标签来修复此问题。

  

cell.tag = [indexPath row];

除了在[indexPath row] == 0时给我一个问题所以我添加了1000并且问题消失了。

  

cell.tag =(1000 + [indexPath row]);

然后我刚刚更换了这一行

  

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

使用

  

UITableViewCell * cell =(UITableViewCell *)[self.tableView viewWithTag:(1000 + [indexPath row])];

现在我得到了一个已经在表视图中的实际单元格的引用,并且我得到了正确的帧值。

答案 1 :(得分:2)

如果有超过1个部分,则可能会提供更多唯一标记

([indexPath section] +1)避免乘以0 (1000 *([indexPath section] +1))给出步骤1000,2000等。

在cellForRowAtIndexPath中设置标签... cell.tag =((1000 *([indexPath section] +1))+ [indexPath row]);

在didSelectRowAtIndexPath中检索它...... UITableViewCell * selectedCell =(UITableViewCell *)    [playlistTableView viewWithTag:((1000 *([indexPath section] +1))+ [indexPath row])];

假设您的列表在每个部分中没有超过1000个单元格。

这是一个很好的问题,Donk非常有用的答案,非常感谢您发布详细信息。