Arhn - архитектура программирования

В каком месте лучше всего добавить подпредставление, зависящее от scrollView.contentSize?

Я использую "pull-to-reload" в Cocoanetic, но с одной изюминкой: я бы хотел, чтобы UITableView мог как бы подтягиваться, чтобы загрузить больше данных.

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

Сначала я попытался добавить его в viewDidLoad класса Cocoanetic (a UITableViewController):

- (void)viewDidLoad 
{
    [super viewDidLoad];
    refreshHeaderView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.view.bounds.size.height, 320.0f, self.view.bounds.size.height)];
    refreshFooterView = [[EGORefreshTableFooterView alloc] initWithFrame:CGRectMake(0.0f, 0.0f + self.tableView.contentSize.height, 320.0f, 20.0f)];
    [self.tableView addSubview:refreshHeaderView];
    [self.tableView addSubview:refreshFooterView];
    self.tableView.showsVerticalScrollIndicator = YES;
}

Это не работает, поскольку self.tableView.contentSize.height в этот момент равно нулю, потому что таблица еще не загрузила свои данные.

Не волнуйтесь, подумал я и попытался добавить его в viewDidLoad созданного мной подкласса UITableViewController:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // stuff
    self.model = [ListingModel listingModelWithURL:@"avalidurl" delegate:self];
    refreshFooterView = [[EGORefreshTableFooterView alloc] initWithFrame:CGRectMake(0.0f, 0.0f + self.tableView.contentSize.height, 320.0f, 20.0f)];
    [self.tableView addSubview:refreshFooterView];
}

Обратите внимание, что я сначала установил модель, но это тоже не сработало по той же причине. Я полагаю, что стол еще не разложен. В отчаянии я дал своему классу свойство BOOL и метод addFooter (BOOL, чтобы убедиться, что он вызывается только один раз), вызванный из tableView:cellForRowAtIndexPath:, что, очевидно, очень далеко от The Right Way ™

Итак, каким будет The Right Way ™ при таком сценарии?

10.05.2011

Ответы:


1

Решение оказалось проще, чем я думал, и 7KV7 действительно дал мне нужную подсказку.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // stuff
    self.model = [ListingModel listingModelWithURL:@"avalidurl" delegate:self];
    /*
     We're forcing a reload of the table here, that way the table has a
     contentSize, so adding the footerView now works correctly.
     */
    [self.tableView reloadData];
    [self addRefreshFooter];
}
10.05.2011

2

Из этого предыдущего вопроса SO Получите уведомление, когда UITableView закончил запрашивать данные ? подкласс UITableView reloadData - лучший подход:

- (void)reloadData {

    NSLog(@"BEGIN reloadData");

    [super reloadData];

    NSLog(@"END reloadData");

}

reloadData не заканчивается, пока таблица не завершит перезагрузку данных. Итак, когда запускается второй NSLog, табличное представление фактически завершило запрос данных.

Если вы создали подкласс UITableView для отправки методов делегату до и после reloadData. Работает как часы.

10.05.2011
  • Итак, как мне поступить таким образом, имея в виду, что я использую UITableViewController? Я загружаю UITableView из пера, поэтому у меня дополнительный вопрос :) 10.05.2011
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..