我在我的UITableView中使用UIView tableFooterView在我的表底部顯示「Loading more」標籤。當顯示tableFooterView中的UIView時,我需要啓動一些懶惰的內容下載。我如何知道tableFooterView何時顯示?UITableView:當tableFooterView顯示時運行代碼?
回答
而是確定何時當被請求的表的最後一行頁腳視圖會告訴你能檢查並加載數據則。用戶滾動到最後一行而沒有向下滾動以查看頁腳的次數可能非常少。效果將是相同的,即您知道用戶何時滾動到底部並且應該加載更多數據。
這可以很容易地在tableView:cellForRowAtIndexPath:
中實現。通過跟蹤IndexPath是最後一行,並在每次添加或刪除新行時更新它,您可以簡單地檢查所請求單元格的IndexPath是否與最後一行的IndexPath相同,並觸發延遲加載來自那裏的更多數據,就像你現在正在做的那樣。
因爲tableFooter就像你說的那樣是一個UIView,它在drawRect中處理繪圖:。如果您覆蓋,您可能會收到通知。
編輯:老答案錯了。
您可以將頁腳的框架轉換爲窗口座標並進行比較。當頁腳被隱藏時,它假定它的Y座標原點座標> 480(對於肖像模式),當頁腳出現時,Y原點座標爲< 480.您可以在didScroll方法中進行比較。
謝謝,希望這對你有所幫助。
參見方法 convertRect:toView:
如果您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中。
矯枉過正。當請求tableview的最後一個單元格時,觸發延遲加載或任何你想要的是要走的路。 – Daniel 2013-04-04 19:18:02
- 1. 運行代碼時的顯示時間
- 2. UITableView tableFooterView顯示在UITableView的頂部 - 錯誤
- 3. 當我運行我的android UIAutomator代碼時,它顯示錯誤
- 4. 當我運行代碼時,我的php代碼不顯示在瀏覽器上
- 5. 非常奇怪的UITableView tableFooterView行爲
- 6. 消除uitableview tablefooterview分隔符
- 7. 當瀏覽home.aspx時顯示Html代碼
- 8. php代碼顯示,而不是運行
- 9. UITableView顯示代碼中的錯誤
- 10. 當我運行代碼,併發送它顯示發送失敗
- 11. 當窗口關閉時運行代碼
- 12. 當設置$ refs.theReference時運行代碼
- 13. 當頁面加載時運行代碼
- 14. 當活動關閉時運行代碼
- 15. 當javascript運行時顯示消息
- 16. 當空的時顯示UITableView頁腳
- 17. UITableView未顯示運行iOS 5的iPad
- 18. 當我在Ubuntu中運行此Python代碼時,圖像不顯示
- 19. 運行SURF演示代碼時出錯
- 20. 運行Opencv示例代碼時出錯
- 21. caliburn當代碼可見時顯示微代碼?
- 22. 代碼顯示交互式運行時的結果,但不能從shell運行時顯示結果
- 23. 運行在顯示器上顯示的VHDL代碼
- 24. java.lang.ClassNotFoundException:當我執行代碼時顯示的oracle.jdbc.internal.XMLTypeIntf異常?
- 25. Android - 當顯示屏旋轉時執行代碼
- 26. Tooltip只顯示從源代碼運行時
- 27. 在運行客戶端代碼時顯示加載gif圖像
- 28. 在運行JavaScript代碼時顯示加載消息
- 29. 運行代碼時,Python龜顯示空白屏幕
- 30. 代碼是乾淨的,但運行時不會顯示
投票,因爲這是怎麼我實現了一次 - 在我看來,最乾淨的解決方案。 – 2012-02-01 11:58:23
這正是我現在正在做的。我會繼續這樣做。 – dhrm 2012-02-01 12:18:33
我也做同樣的事情,但這是最好的方式嗎? – Alupotha 2016-05-13 05:09:09