iOS UICollectionView那些我”錯過”的API

夏天然後發表於2016-08-28

前言: 這是博主在學習舊知識筆記中的一篇, 誰叫我們入門晚呢, 學習的過程中, 不會的知識, 就是因為我們年輕而已(囧~) 我總是這樣安慰自己(逃~), 所以我們需要補充一下”錯過”的重要的東西, 下面列出了本文會提到的一些概念. 如不感興趣直接退出即可
UICollectionView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UICollectionViewLayout

在開始之前先有必要回憶一下UICollectionView

使用collectionView有一段時間了, 進行一個簡單的總結和理解~~~.
UICollectionView是一種類似於UITableView不同於UITableView的佈局方式.

  • Cells 用於展示內容的主體,對於不同的cell可以指定不同尺寸和不同的內容, 且可以複用(一般需要自定義 沒有提供類似於tableview那麼多的屬性).
  • Supplementary Views 追加檢視 可以理解為tableView每個Section的Header或者Footer,用來標記每個section的view, 且也可以被複用.
  • Decoration Views 裝飾檢視 這是每個section的背景, 且也可以被複用.

關於Cell的說明:

  • 首先是cell本身作為容器view
  • 然後是一個大小自動適應整個cell的backgroundView,用作cell平時的背景
  • 再其上是selectedBackgroundView,是cell被選中時的背景
  • 最後是一個contentView,自定義內容應被加在這個view上

UICollectionViewDataSource

實現上面三個方法, 基本就可以正常工作了.

UICollectionViewDelegate

進行一些行為操作時候用到的

  • cell的高亮
  • cell的點選
  • cell的選中狀態等等.
對於點選cell發生哪些行為做一個說明

1collectionView:shouldHighlightItemAtIndexPath: 是否應該高亮?
2collectionView:didHighlightItemAtIndexPath: 如果1回答為是,那麼高亮
3collectionView:shouldSelectItemAtIndexPath: 無論1結果如何,都詢問是否可以被選中?
4collectionView:didUnhighlightItemAtIndexPath: 如果1回答為是,那麼現在取消高亮
5collectionView:didSelectItemAtIndexPath: 如果3回答為是,那麼選中cell

UICollectionViewDelegateFlowLayout

可以對cell的大小, 間隙進行調整 使用協議的方式

UICollectionViewFlowLayout

是UICollectionViewLayout(稍後會提到)的子類, 他提供一些對cell進行簡單設定的屬性, Flow Layout簡單說是一個直線對齊的layout.

UICollectionViewLayout

它負責了將各個cell、Supplementary View和Decoration Views進行組織,為它們設定各自的屬性.可以有:位置, 尺寸, 透明, 層級, 形狀, 等等. 所以自定義各種樣式的佈局就需要自定義Layout了.
實現一個自定義layout一般繼承於UICollectionViewLayout然後需要重寫以下幾個方法:

注意: UICollectionViewLayout例項化之後, 有一些方法將自動被呼叫

需要更新layout時, 呼叫這個方法 有點UIView的setNeedsLayout的意思…

說了這麼多, 我覺得我理解的更深一點了, 你呢?
說的再多不如show you my demo 稍後有時間補上… [大笑.png]
這裡是官方的一個Dmeohttps://github.com/mpospese/CircleLayout.git

End

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

iOS UICollectionView那些我”錯過”的API iOS UICollectionView那些我”錯過”的API

相關文章