Какое место для добавления подпредставления зависит от scrollView.contentSize? - PullRequest
2 голосов
/ 10 мая 2011

Я использую Cocoanetic 's pull-to-reload , но с изюминкой: я бы хотел, чтобы 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:, что, очевидно, далеко от правильного пути ™

Так что же, учитывая этот сценарий, будет правильным путем ™?

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Решение оказалось проще, чем я думал, и 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];
}
1 голос
/ 10 мая 2011

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

- (void)reloadData {

    NSLog(@"BEGIN reloadData");

    [super reloadData];

    NSLog(@"END reloadData");

}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...