ContentOffset в динамическом UITableView

Я жестко закодировал «загрузочную» ячейку как последнюю ячейку моего табличного представления, когда она генерируется, я вызываю некоторые методы для загрузки новых данных из веб-службы, и когда я получаю ответ, я сохраняю данные, отправляю уведомление и вызовите reloadData в моем представлении таблицы.

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

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

Кажется, я не могу успешно установить начальное смещение, чтобы скрыть эту загрузочную ячейку, потому что, если она отображается, она, конечно, начнет загружать более ранние данные. Я знаю о scrollToRowAtIndexPath:atScrollPosition:animated:, но не могу найти подходящего места для его вызова (с индексным путем: 1:0, строка 1, раздел 0).

Как я упоминал ранее, мне нужно установить этот видимый раздел до того, как будут созданы какие-либо ячейки.

Кто-нибудь пробовал такую ​​ячейку в начале представления таблицы?

Как я могу установить начальный видимый раздел моего табличного представления еще до того, как первые ячейки будут загружены?

Должен ли я делать что-то более необычное здесь? Например, иметь tableviewHeader, и когда он отображается, я вставляю строку по пути индекса 0: 0, который является загрузчиком, и удаляю его после перезагрузки таблицы?


person Daniel    schedule 16.05.2012    source источник


Ответы (1)


Я использовал contentInset, а не смещение в viewDidLoad.

[self.tableView setContentInset:UIEdgeInsetsMake(-50,0,0,0)];

Когда генерируется строка по пути индекса [0,0], я сбрасываю вставку, это происходит в tableView:cellForRoWAtIndexPath:

[self.tableView setContentInset:UIEdgeInsetsMake(0,0,0,0)];

Каждый раз перед отправкой сообщения reloadData в табличное представление я возвращаю эту вставку обратно:

- (void)reload{
    [self.tableView setContentInset:UIEdgeInsetsMake(-50,0,0,0)];
    [self.tableView reloadData];
}

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

person Daniel    schedule 17.05.2012