UITableView Cell IndexPath

Может ли кто-нибудь сказать мне, как я могу получить ячейку IndexPath? Я сохранял IndexPath в методе tableView: cellForRowAtIndexPath:, но это только загружается, когда просматривается ячейка, и мне нужно знать его путь к индексу метода viewDidLoad. это привело к нулевому значению, поскольку, как я сказал, он загружает только его значение после того, как ячейка просматривалась один раз.

Спасибо.

ИЗМЕНИТЬ

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

Ответы

Ответ 1

Используйте метод indexPathForCell: в таблицеView, указав указатель на UITableViewCell, он возвращает свой индексный шаблон.

Вы можете поместить scrollToRowAtIndexPath:atScrollPosition:animated: в метод viewWillAppear, если он еще не настроен в viewDidLoad. В любом случае, это лучшее место, если представление может появляться более одного раза после загрузки, например, когда модальный контроллер просмотра вызывает отставки.

Ответ 2

A UITableViewCell не имеет свойства NSIndexPath. Делегат UITableViewDataSource определяет методы, которые запрашивают ячейку для данного NSIndexPath, но это не значит, что ячейка имеет какое-либо устойчивое отношение к свойству NSIndexPath.

Возможно, это поможет, если вы объясните больше того, что вы хотели для этого свойства? Что вы хотите сделать с расположением ячейки в viewDidLoad?

Ответ 3

Попробуйте это.

    NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj];
NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition];
 NSLog(@"Selected  row:%d in section:%d",indexPath.row,indexPath.section);

Вызываем так:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside];

Ответ 4

Мне кажется, как вы ответили на свой вопрос: вы не можете. Поскольку у ячейки нет indexPath, когда выполняется viewDidLoad. И на самом деле, у него тоже нет ни одного, потому что одна и та же ячейка может быть повторно использована, чтобы быть в другом индексе в пределах десятой доли секунды, если вы используете деактивацию ячейки (приятное слово!), Которое вам нужно.

EDIT: Хорошо, я думаю, что вижу то, что вы хотите: вы сами сохраняете indexPath, когда передаете ячейку в tableView. Примечание: если вы этого не сделаете, вы не сможете точно знать, на каком индексе будет помещена определенная ячейка, по крайней мере, если вы делаете то, что вам нужно.

Итак, что вы можете сделать, просто создайте все ячейки в вашем методе viewDidLoad, сохраните их в массиве, а затем, когда представление таблицы запросит их, просто передайте их из этого массива.

Обратите внимание, что это не является хорошим способом заполнения табличного представления, поскольку он не позволяет повторно использовать ячейки. Лучшим способом было бы сохранить содержимое ячеек (простые UIViews) в массиве и добавить их как дочерние элементы в представление содержимого ячейки перед возвратом ячейки. Это позволит использовать повторное использование ячеек, что имеет решающее значение для хорошей производительности. Если у вас больше ячеек, чем на экране, вам не придется беспокоиться о повторном использовании их.