一種讓UITableView的數據從下往上增加的方式

遇到問題

通常來講tableview的數據都是從上往下增加,以下圖所示(先是aaa出如今表格列表的最頂部,而後bbb出如今aaa的下面,以此類推)數組

可是若是咱們想反向這個過程該怎麼作呢?以下圖所示(先是aaa出如今表格列表的最底部,而後aaa被頂上去,bbb出如今aaa原來的位置)app

解決問題

咱們固然第一時間向萬能的stackoverflow君求救,找到了這個解決方案code

原理很簡單就是讓整個tableview上下倒轉後再繪製在界面上,讓咱們當即驗證一下吧,建一個簡單的Single View Application工程,而後在Storyboard的那個默認視圖上拖一個UITableView,而後作一些必要的設置能讓tableview能正常工做(這裏就再也不贅述了,相信你們沒任何問題)。orm

其中定義一個數組records用於存放須要顯示的數據,其中數據以下blog

self.records = @[@"aaa",
                 @"bbb",
                 @"ccc",
                 @"ddd",
                 @"eee",
                 ....
                 ];

而後咱們在-viewDidLoad:中加入如下代碼get

self.tableView.transform = CGAffineTransformMakeScale (1,-1);

趕忙運行一下看看博客

咱們發現有兩個問題:第一,cell自己的內容是上下顛倒的;第二,bbb出如今了aaa的上面。讓咱們一個一個地來解決這些問題。io

解決cell內容上下顛倒問題

先解決第一個問題,其實很是簡單,因爲是整個tableview的上下顛倒致使了cell內容的上下顛倒,那麼要讓cell的內容看起來是正常的,只要讓cell的內容再次上下顛倒一下就行。咱們就在tableView:cellForRowAtIndexPath:方法中加入如下代碼table

cell.contentView.transform = CGAffineTransformMakeScale (1,-1);

此時運行一下會發現cell的內容再也不上下顛倒了。form

解決數據順序不正確的問題

好了,接下來解決上面的第二個問題,咱們但願aaa出如今bbb的上面該怎麼作呢?其實也很簡單,只須要根據NSIndexPath的值取正確的數據就行。

由於咱們整個tableview是上下顛倒的,若是不作任何特殊處理,那麼self.records的第一個元素將永遠顯示在屏幕的最底部。就像在正常狀況下,數據的第一個元素永遠顯示在屏幕的最上部同樣。因此解決方案也就呼之欲出,只要在顯示數據時候對數據的順序作一點小小的變動就好了。

固然這也有兩種方案,第一種在顯示新的數據時改變self.records的內容,在位置0插入新的數據,這在數據是動態生成的時候能夠一用,可是若是像咱們在上面已經定義的同樣是固定的呢?咱們就不得再也不定義一個mutable的數組而後每次插入數據,此時這個方案就顯得繁瑣了。

第二種方法就是僅僅在顯示時修改每一個數據的index映射方式就成。好比咱們當前須要顯示三個元素:"aaa", "bbb"以及"ccc"。咱們要確保aaa要顯示在bbb上面,而bbb顯示在ccc上面。那麼tableView:cellForRowAtIndexPath:中能夠作以下計算,當indexPath.Row的值爲0時,咱們要取數據"ccc";當indexPath.Row的值爲1時,咱們要取數據"bbb";當indexPath.Row的值爲2時,咱們要取數據"ccc".

具體代碼以下(其中self.numberOfRecords表示當前須要顯示多少數據)

NSInteger index = self.numberOfRecords - 1 - indexPath.row;
NSString *record = self.records[index];

最後再運行一下吧,此時就能夠看到咱們想要的效果。

總結

若是想看到這種需求到底會產生怎樣的效果,能夠訪問咱們的神劇http://www.shenjuapp.com/(我很想吐槽目前蘋果審覈的效率。。。所以你們能夠先體驗一下安卓的版本)。

目前咱們已經作到了更爲平滑的滾動,敬請等待咱們的下一個版本,同時也敬請期待從此的博客,我會闡述如何這種狀況下的平滑滾動。

相關文章
相關標籤/搜索