2012-02-01 66 views

回答

12

而是確定何時當被請求的表的最後一行頁腳視圖會告訴你檢查並加載數據則。用戶滾動到最後一行而沒有向下滾動以查看頁腳的次數可能非常少。效果將是相同的,即您知道用戶何時滾動到底部並且應該加載更多數據。

這可以很容易地在tableView:cellForRowAtIndexPath:中實現。通過跟蹤IndexPath是最後一行,並在每次添加或刪除新行時更新它,您可以簡單地檢查所請求單元格的IndexPath是否與最後一行的IndexPath相同,並觸發延遲加載來自那裏的更多數據,就像你現在正在做的那樣。

+1

投票,因爲這是怎麼我實現了一次 - 在我看來,最乾淨的解決方案。 – 2012-02-01 11:58:23

+0

這正是我現在正在做的。我會繼續這樣做。 – dhrm 2012-02-01 12:18:33

+0

我也做同樣的事情,但這是最好的方式嗎? – Alupotha 2016-05-13 05:09:09

0

因爲tableFooter就像你說的那樣是一個UIView,它在drawRect中處理繪圖:。如果您覆蓋,您可能會收到通知。

編輯:老答案錯了。

1

您可以將頁腳的框架轉換爲窗口座標並進行比較。當頁腳被隱藏時,它假定它的Y座標原點座標> 480(對於肖像模式),當頁腳出現時,Y原點座標爲< 480.您可以在didScroll方法中進行比較。

謝謝,希望這對你有所幫助。

參見方法 convertRect:toView:

0

如果您tableFooterView是觀察更改表的contentOffset財產(或許也改變表的contentSize屬性),就可以準確地計算出,當它被滾動到視圖下列變量:

  • tableView.contentOffset.y - 垂直量,通過該內容視圖的原點從滾動視圖的原點
  • tableView.contentSize.height偏移 - 內容視圖的高度
  • tableView.bounds.size.height - 表範圍

如果垂直內容偏移+表界的高度超過該表內容大小的高度,我們可以假設現在的頁腳是在視線的高度。

您可以將其封裝在if語句中並用它來發送通知。然後,您可以做進一步的測試,以頁腳動態拉伸過或其它預期效果:

if((tableView.contentOffset.y + tableView.bounds.size.height) > tableView.contentSize.height){ 
    //send notification, dynamic resizing, etc...` 
} 

下面是動作有點代碼片段:

// Set up an observer for changes in the table's contentOffset or contentSize. 
// This can be done during initialisation of the tableFooterView 
[tableView addObserver:self 
      forKeyPath:@"contentOffset" 
       options:NSKeyValueObservingOptionNew 
       context:NULL]; 
[tableView addObserver:self 
      forKeyPath:@"contentSize" 
       options:NSKeyValueObservingOptionNew 
       context:NULL]; 

// Further down in code, listen for the changes: 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
    change:(NSDictionary *)change context:(void *)context { 
    if ([keyPath isEqualToString:@"contentOffset"] || 
     [keyPath isEqualToString:@"contentSize"]) { 

     if((tableView.contentOffset.y + tableView.bounds.size.height) > tableView.contentSize.height){ 
      // the tableFooterView should now be in view 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:@"scrollToLoadNeedsLoad" 
           object:self]; 
      // dynamically change the footer here (ideal for making it stretch with the table) 
     } 

    } 
} 

您可以實現此保存視圖控制器內引用一個表,或者你可以把它封裝在你自己的ScrollToLoadView中。

+0

矯枉過正。當請求tableview的最後一個單元格時,觸發延遲加載或任何你想要的是要走的路。 – Daniel 2013-04-04 19:18:02

相關問題