2013-08-18 23 views
2

我試圖做一個自定義表視圖。我有一個加載了UIViews的UIScrollView。我想重新創建tableview具有的可重用單元格功能。我想知道做什麼可能是一個好方法。試圖創建一個大多數自定義的TableView

我在想,當UIViews滾動屏幕時,我會從子視圖中刪除它們,當我需要另一個時,我只需添加它。但我不知道什麼方法可能是最好的做到這一點。

我可以檢查看看位置在scrollViewDidScroll:,但我不知道這是否是最好的事情來檢查一遍又一遍。如果任何人有任何建議或有用的提示,真的很棒。

謝謝!

回答

2

爲什麼scrollViewDidScroll不理想的選擇的一個原因是,您的滾動視圖子類將需要它自己的代理。這將會否認該類用戶有機會成爲代表(至少很容易)。

更好的地方檢查這是覆蓋layoutSubviews。是的,像scrollViewDidScroll,它被稱爲很多!但是如果你仔細想想,唯一能夠確定是否有子視圖被滾動的方法就是檢查滾動發生的時間。

所以關鍵是要儘可能有效,你可以檢查。我想嘗試的第一件事是快速枚舉子視圖,詢問每個由contentOffset轉換的幀是否落在父親的邊界內(使用CGRectIntersectsRect)。如果沒有,請將其添加到您的重用池中,並將其從超級視圖中移除。

+0

好東西。我喜歡這聽起來如何。快速提問。當我滾動屏幕頂部的第一行時,我計劃通過將其粘貼到底部來重用它。但允許用戶向下滾動到我需要增加ScrollView的'contentSize'的新添加的行。這個可以嗎?或者我應該嘗試另一種方式? –

+1

我想象tableview的工作方式是要求它委託numberOfRows並將內容大小設置爲rowHeight的倍數。 – danh

1

子類UIScrollView並覆蓋setContentOffset。這就是scrollViewDidScroll消息來自原始UITableView的地方,這就是您可以實現自己的邏輯的地方。

編輯:您可能想要研究PSTCollectionView的源代碼,該代碼不是自定義UITableView而是自定義UICollectionView