#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 в родительское представление с делегатом. Я бы предположил, что вы хотите это сделать, когда это произойдет, поэтому настройте его в своем методе делегирования, который вызывается при выборе новой ячейки.