как центрировать выделение uitableview со значением indexpath

#iphone #ios #uitableview #nsindexpath

#iPhone #iOS #uitableview #nsindexpath

Вопрос:

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

Одна из проблем заключается в том, что если пользователь выбрал ячейку из довольно большого списка, трудно найти ячейку, которую они выбрали снова, если они захотят ее изменить (поскольку они допустили ошибку)

Я хотел бы знать, можно ли использовать indexPath или что-то подобное для центрирования ранее выбранной ячейки uitableview в центре экрана?

Обновить::

Вот графическое представление того, чего я пытаюсь достичь, чтобы сделать его более понятным..

шаг первый: выберите ячейку, затем перейдите в subview и выберите ячейку (значение), которую вы хотите передать обратно в основной вид (сохраните indexPath выбранной ячейки) введите описание изображения здесь

шаг второй: пользователь либо хочет изменить свой выбор, либо допустил ошибку и должен был выбрать ячейку ниже той, которую он выбрал … повторите предыдущие шаги, но отобразите ранее выбранную ячейку в центре представления..

введите описание изображения здесь

Комментарии:

1. Это проблема cell reusability ? Что вы имеете в виду to center the previously selected cell of the uitableview to the center of the screen ???

2. нет проблем с возможностью повторного использования, что я имею в виду, центрируя ячейку по центру экрана, я имею в виду, когда пользователь выбирает ячейку из вложенного представления, они мгновенно возвращаются к основному представлению … если они поймут, что выбрали неправильную ячейку, я бы хотел, чтобы они могли вернутьсяперейдите в подпредставление и измените их выбор… однако, если они выбрали что-то далеко внизу в tableview, если им будет трудно снова найти свой выбор… поэтому я хотел бы центрировать это (ранее выбранную ячейку) на экране, как только представление загрузится для пользователя

3. Так что да, ScrollToIndexPath должен работать 😉 Хорошая работа с изображениями.

4. спасибо 🙂 все еще работаю над этим, поскольку я получаю некоторые странные ошибки..

Ответ №1:

Вы пробовали следующую функцию

 [tableView scrollToRowAtIndexPath: atScrollPosition:UITableViewScrollPositionMiddle animated:YES]
  

Комментарии:

1. вау .. это именно то, что я хочу.. Я прочитал об этом и должен определенно работать .. однако я получаю сообщение об ошибке, когда пытаюсь использовать его при первой загрузке моей таблицы, у меня нет набора «oldCheckedData».. [self.TableView scrollToRowAtIndexPath:oldCheckedData atScrollPosition:UITableViewScrollPositionMiddle анимированный: ДА];

2. Я рад, что это полезно. Если oldCheckedData не задан, возможно, вы можете инициализировать его с помощью [NSIndexPath indexPathForRow:0 inSection:0] для прокрутки в начало таблицы в первый раз.

3. Я делал это в своем методе viewDidLoad if (oldCheckedData != NULL) { [self.TableView scrollToRowAtIndexPath:oldCheckedData atScrollPosition:UITableViewScrollPositionMiddle анимированный: ДА]; } Однако я продолжаю получать эту ошибку ***** Ошибка утверждения в -[UITableView _createpreparredcellforglobalrow:withIndexPath: ], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:5678**

4. Я бы сказал, используйте его в анимированном методе viewDidAppear: (BOOL). Это гарантировало бы, что функция вызывается после добавления представления в окно. Или вы можете использовать его в viewWillAppear: метод…

5. Попробуйте использовать [Длина oldCheckedData] в условии if вместо oldCheckedData != NULL

Ответ №2:

UITableView является подклассом UIScrollView — попробуйте установить смещение содержимого (определите, сколько с учетом высоты ячейки и indexPath).

 [tableView setContentOffset:CGPointMake(0, indexPath.row*cellHeight) animated:YES];
  

должно сработать. Возможно, вы захотите сделать математику немного по-другому.

Комментарии:

1. должен ли я вызывать это в viewdidload или другим способом?

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