Я использую "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 ™ при таком сценарии?