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

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

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

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

ОБНОВИТЬ::

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

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

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

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


person C.Johns    schedule 06.10.2011    source источник
comment
Это проблема с cell reusability ? Что вы подразумеваете под to center the previously selected cell of the uitableview to the center of the screen ???   -  person Legolas    schedule 07.10.2011
comment
нет проблем с возможностью повторного использования. Что я имею в виду под центрированием ячейки по центру экрана, я имею в виду, когда пользователь выбирает ячейку из подпредставления, они мгновенно направляются обратно в основной вид... если они затем понимают, что они выбрали неправильная ячейка, я бы хотел, чтобы они могли вернуться к подвиду и изменить свой выбор... однако, если они выбрали что-то далеко внизу в табличном представлении, им будет трудно снова найти свой выбор... поэтому я хотел бы центрировать эту (ранее выбранную ячейку) на экране, как только представление загрузится для пользователя   -  person C.Johns    schedule 07.10.2011
comment
Так что да, ScrollToIndexPath должен работать ;) Хорошая работа с изображениями.   -  person Legolas    schedule 07.10.2011
comment
спасибо :) все еще работаю над этим, так как получаю странные ошибки ..   -  person C.Johns    schedule 07.10.2011


Ответы (2)


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

[tableView scrollToRowAtIndexPath: atScrollPosition:UITableViewScrollPositionMiddle animated:YES]
person BumbleBoks    schedule 06.10.2011
comment
вау .. это именно то, что я хочу .. Я читал об этом и определенно должен работать .. однако я получаю сообщение об ошибке, когда пытаюсь использовать его, поскольку при первой загрузке моей таблицы у меня нет набора oldCheckedData .. [ self.tableView scrollToRowAtIndexPath: oldCheckedData atScrollPosition: UITableViewScrollPositionMiddle анимированный: YES]; - person C.Johns; 07.10.2011
comment
Я рад, что это полезно. Если oldCheckedData не установлен, возможно, вы можете инициализировать его с помощью [NSIndexPath indexPathForRow:0 inSection:0] для прокрутки к началу таблицы в первый раз. - person BumbleBoks; 07.10.2011
comment
Я делал это в своем методе viewDidLoad, если (oldCheckedData! = NULL) { [self.tableView scrollToRowAtIndexPath: oldCheckedData atScrollPosition: UITableViewScrollPositionMiddle анимированные: YES]; } Однако я продолжаю получать эту ошибку ***** Ошибка утверждения в -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:5678** - person C.Johns; 07.10.2011
comment
Я бы сказал, используйте его в анимированном методе viewDidAppear:(BOOL). Это обеспечит вызов функции после добавления представления в окно. Или вы можете использовать его в методе viewWillAppear... - person BumbleBoks; 07.10.2011
comment
Попробуйте использовать [oldCheckedData length] в условии if вместо oldCheckedData != NULL - person BumbleBoks; 07.10.2011
comment
сладкий, он работает отлично.. Я сделал что-то еще, пытаясь заставить это работать, и не вернулся и не исправил его.. однако я не совсем уверен, где использовать этот фрагмент кода. это портит мою прокрутку... - person C.Johns; 07.10.2011

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

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

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

person Evan Davis    schedule 06.10.2011
comment
я бы назвал это в viewdidload или в другом методе? - person C.Johns; 07.10.2011
comment
Я не уверен, что полностью понимаю дизайн приложения, но из того, что я понимаю, вы хотите прокрутить таблицу до ранее выбранной при выборе новой ячейки и отправить indexPath в родительское представление с помощью делегата. Я бы предположил, что вы хотите сделать это, когда это произойдет, поэтому настройте его в своем методе делегата, который вызывается при выборе новой ячейки. - person Evan Davis; 07.10.2011