Я использую iPhone SDK 3.1.3. У меня есть UITableViewController
, который получает данные от другого контроллера. Табличное представление добавляется как подпредставление к основному виду, но фрейм установлен так, что он не виден. Рамка табличного представления обновляется и перемещается по основному виду нажатием кнопки.
Появится табличное представление, и я перейду к последней строке. Если я выберу последнюю строку, я перезагрузлю таблицу с большим количеством данных. Таблица обновляется с большим количеством данных. Все отлично работает, кроме позиции прокрутки всегда сверху.
Мне нужно, чтобы позиция прокрутки была последней строкой, на которую я нажал, чтобы загрузить больше данных. Я сохраняю позицию прокрутки и вызываю следующий код после загрузки дополнительных данных. Он выполняется без проблем, но позиция прокрутки всегда верхняя.
[theTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:savedScrollPosition inSection:0] atScrollPosition:savedScrollPosition animated:NO];
Вышеупомянутое, кажется, не имеет никакого эффекта. ViewWillAppear:
ViewDidAppear:
не запускается, и мне говорят, что, если контроллер представления создается в коде, что имеет место, они не запускаются. Пожалуйста, помогите мне выяснить, как и когда устанавливать позицию прокрутки после перезагрузки таблицы ([theTableView reloadData]
), чтобы она находилась в строке, по которой я щелкнул.
Код для перезагрузки просмотра таблицы и прокрутки
////performAction will notify the tableviewcontroller which will result in didPerformAction being called
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == lastRow)
{
savedScrollPosition = lastRow;
//perform the action
[controller performAction];
}
}
- (void) didPerformAction:(NSNotification *)obj
{
[theTableView reloadData];
[theTableView
scrollToRowAtIndexPath: [NSIndexPath indexPathForRow:savedScrollPosition inSection:0]
atScrollPosition:UITableViewScrollPositionBottom
animated:NO];
}