Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 访问现有UITableViewCell_Ios_Animation_Uiview_Uitableview_Coordinates - Fatal编程技术网

Ios 访问现有UITableViewCell

Ios 访问现有UITableViewCell,ios,animation,uiview,uitableview,coordinates,Ios,Animation,Uiview,Uitableview,Coordinates,这是一个不同的问题,但我认为错的并不是错的,所以我调整了标题,以反映我真正的理解 我正在制作一个动画,它将普通UITableViewCell的cell.imageView中的图像复制到屏幕底部的选项卡栏,以模拟将项目放入购物车。我可以复制图像并将副本作为窗口的子视图放置,但我不知道如何获得原始图像的绝对位置,以便将其放置在顶部作为动画的起点 图像始终显示在屏幕顶部,就像放置在0,0 很抱歉,这个问题太粗鲁了,我肯定我遗漏了一些非常明显的东西 -(void)tableView:(UITableVi

这是一个不同的问题,但我认为错的并不是错的,所以我调整了标题,以反映我真正的理解

我正在制作一个动画,它将普通UITableViewCell的cell.imageView中的图像复制到屏幕底部的选项卡栏,以模拟将项目放入购物车。我可以复制图像并将副本作为窗口的子视图放置,但我不知道如何获得原始图像的绝对位置,以便将其放置在顶部作为动画的起点

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

很抱歉,这个问题太粗鲁了,我肯定我遗漏了一些非常明显的东西

-(void)tableView:(UITableView) *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath) *)索引{

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
}


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

cell.tag=[indexPath行]

除了当[indexPath row]==0时给我带来了一个问题。所以我加了1000,这个问题就消失了

cell.tag=(1000+[indexPath行]

然后我换了这条线

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

UITableViewCell*单元格=(UITableViewCell*)[self.tableView视图WithTag:(1000+[indexPath行]


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

对于多个部分,这可能会提供更多独特的标记

([indexPath节]+1)避免与节0相乘 (1000*([indexPath节]+1))给出了1000、2000等步骤

在cellForRowAtIndexPath集合标记中。。。 cell.tag=((1000*([indexPath节]+1))+[indexPath行]

在didSelectRowAtIndexPath中检索它。。。 UITableViewCell*selectedCell=(UITableViewCell*) [PlayTableView视图带标记:((1000*([indexPath节]+1))+[indexPath行]

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


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

我想我知道怎么回事了。当我调用[self tableView:tableView cellForRotAtIndexPath….]时。我没有得到对现有单元格的引用。我从零开始得到一个新的“拷贝”。因此,当我试图获取有关单元格位置的信息时,我实际上得到了单元格副本的位置,而该副本尚未正确布局。我喜欢Donk使用视图标记的想法。当然,这只适用于可见细胞,因为它们是可回收的。但在响应UI事件时,这很好!快速搜索Szudzik的函数:
A>=b?a+a+b:a+b*b其中a,b>=0。在分区和行中弹出,以获取单元格的唯一视图ID。