Доступ к существующему UITableViewCell - PullRequest
3 голосов
/ 25 февраля 2011

Это был другой вопрос, но то, что я считал неправильным, было не так, поэтому я изменил название, чтобы отразить то, что я действительно понял.

Я работаю над анимацией, которая берет копию изображения в cell.imageView обычного UITableViewCell и перемещает его на панель вкладок в нижней части экрана, чтобы имитировать помещение товара в корзину. Я могу скопировать изображение и разместить копию в качестве подпредставления окна, но не могу понять, как получить абсолютную позицию исходного изображения, чтобы поместить его сверху в качестве начальной точки моей анимации.

Изображение всегда отображается вверху экрана, как если бы оно было расположено в 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 ]

5 голосов
/ 25 февраля 2011

Так что я все делал неправильно.Я делал новую ячейку с тем же содержимым, а не использовал текущую ячейку.Я исправил это, добавив тег в ячейку при ее создании.

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])];

Теперь я получил ссылку на фактическую ячейку, которая уже находится в табличном представлении, и получаю правильные значения кадра.

2 голосов
/ 02 июня 2012

При наличии более 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] +1)) + [строка indexPath])];

при условии, что ваш список не содержит более 1000 ячеек в каждом разделе.

Это был отличный вопрос с очень полезным ответом от Донка, большое спасибо за публикацию подробностей.

...