Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing existing UITableViewCell

This was a different question but what I thought was wrong was not wrong so I adjusted the title to reflect what I really figured out.

I am working on an animation that takes a copy of an image in the cell.imageView of a normal UITableViewCell and moves it to the tab bar on the bottom of screen, to simulate putting an item in a cart. I can copy the image and place the copy as a subview of the window, but I can't figure out how to get the absolute position of the original image so I can place it on top as the starting point of my animation.

The image always shows up at the top of the screen as if placed at 0,0.

Sorry for the noobish nature of the question, I'm sure i'm missing something very obvious.

-(void)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

}

like image 407
Donk Avatar asked May 23 '26 18:05

Donk


1 Answers

So I was doing this all wrong. I was making a new cell with the same content instead of using the current cell. I fixed this by adding a tag to the cell when it was created.

cell.tag = [indexPath row];

Except that gave me a problem when [indexPath row] == 0. So I added 1000 to it and that problem went away.

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

Then I just replaced this line

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

With

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

Now I got a reference to the actual cell that is already in the table view and I am getting proper frame values.

like image 85
Donk Avatar answered May 25 '26 07:05

Donk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!