UICollectionView 自定義組頭組尾的XIB方法


UICollectionView的加載方式和Tableview很像,基本上加載的方法都差不多,尤其是它的數據源的方法和代理方法基本上類似,只不過是名字上有點細微的差別而已。這里面不贅述。

 

1. UICollectionView為什么要自定義組頭和組尾呢?原因是因為如果不自定義,系統會復用Cell,導致加載的控件出現重復的現象。

如下圖: 綠色的view為組頭,通過視圖發現,組頭上面的控件出現了疊加的現象。

  

如何解決上面復用的問題,使用initWithFrame的初始化視圖的方法,當cell上的view創建顯示的時候,創建控件。

解決思路:

a. 自定義組頭方法 

 b. 組頭view顯示的時候就創建控件 

c.傳入數據 重寫Set 方法

 

最終運行效果

 

由於這個自定義方法很簡單這里就不詳細說明了。

2.下面重點說的是如何使用xib的方法來創建組頭或者組尾的控件。

這里面以創建一個尾部視圖控件為例:

1.手動創建一個空的xib,繼承自ReusableViw

 

 

2.創建好xib 一定要重用標識符

 

 

 

 

3.在.h文件中創建一個自定義的IndexPath屬性

 

 

4..m文件中重寫該方法 這里面的Lable是Xib控件中的lable

 

5.到現在為止已經創建好了自定義的尾視圖文件和xib了,那么回到主函數中去實現加載的方法

注意:組頭和組尾的設置Frame必須要在代理方法中去實現,如果不在代理方法中,設置是無效的具體設置如下圖

 

6.由於是代碼創建的collectionview,所以必須要注冊

a.注冊組頭的方法 在viewdidload中實現如下代碼

 

b.注冊組尾的方法

首先這里面有一個bug ,如果你按照上面的注冊方法注冊組尾的話是不可能實現的,因為組頭不是xib,所以可以用上面的方法,而我們的組尾的方法是通過xib的方式實現的,所以要加載xib文件。

這里面有個小bug 先上圖

 

當使用nib的方式注冊,仿照組頭的創建方式注冊的時候,會發現彈出⚠️,運行的時候會報錯。

原因是找不到組尾的初始化的方法,如何解決呢?

如下圖:

 

也就是說,當我使用XIB方式進行創建組尾或者組頭的時候,不能使用  類名+Class 的方式進行加載,必須使用系統原有的類名來創建。

最終運行效果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM