2011-05-10 88 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

相關問題