UITableView Cell IndexPath - PullRequest
       13

UITableView Cell IndexPath

17 голосов
/ 30 марта 2010

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

Спасибо.

EDIT

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

Ответы [ 4 ]

18 голосов
/ 01 апреля 2010

Используйте метод indexPathForCell: для tableView, если указатель на UITableViewCell, он возвращает свой indexPath.

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

2 голосов
/ 30 марта 2010

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

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

1 голос
/ 03 мая 2011

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

    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];
0 голосов
/ 30 марта 2010

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

РЕДАКТИРОВАТЬ: Хорошо, я думаю, что я вижу, что вы хотите: вы сами сохраняете indexPath где-то, когда вы передаете ячейку в tableView. Примечание: если вы этого не сделаете, вы не сможете точно узнать, в каком indexPath расположена конкретная ячейка, по крайней мере, если вы делаете вещи так, как должны.

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

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

...