2011-05-10 70 views
2

我正在使用Cocoanetic's pull-to-reload,但有一个转折:我想UITableView能够拉起,因为它是,加载更多的数据。添加依赖于scrollView.contentSize的子视图的正确位置是什么?

我自定义了这些类,并设法调整所有功能以支持此功能。基本上,我得到的结果是我的代码中创建和添加额外视图的地方。

我第一次尝试将它添加在viewDidLoad中Cocoanetic的类(一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是零,因为表没有加载它的数据尚未。

不用担心,我想,并试图将其添加在子类的UITableViewController我做的viewDidLoad中:

- (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]; 
} 

注意我第一次设置的模式,但也没有工作,为同样的道理。我认为桌子还没有铺好。在无奈我给我的类从tableView:cellForRowAtIndexPath:称为BOOL财产和addFooter方法(BOOL,以确保它仅被调用一次),这显然是一条正确的路™相去甚远

那么,什么会,鉴于这种情况,是正确的方式?

回答

2

解决方案比我想象的更容易,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

从这个以前SO质疑Get notified when UITableView has finished asking for data?子类的UITableView的reloadData是最好的办法:

- (void)reloadData { 

    NSLog(@"BEGIN reloadData"); 

    [super reloadData]; 

    NSLog(@"END reloadData"); 

} 

reloadData没有结束之前,该表完成加载其数据。所以,当第二个NSLog被触发时,表视图实际上已经完成了数据请求。

如果您已将子类UITableView在reloadData之前和之后发送方法给代理。它像一个魅力。

+0

那么我怎么会这样,记住我使用UITableViewController?我从一个笔尖加载UITableView,因此我额外的问题:) – Zsub 2011-05-10 10:59:51

相关问题