UICollectionView 具體解說學習

UICollectionView 和UITableView非常像,是APPLE公司在iOS 6后推出的用于處理圖片這類UITableView 布局困難的控件,和UITableView 一樣,它也有自己的Datasource和delegate。以下具體說下像這種方式的效果.
首先來看看UICollectionView 的DataSource。

@protocol UICollectionViewDataSource <NSObject>
@required- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;@optional- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;// The view that is returned must be retrieved from a call to -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;@end

能夠看到和UITableView 一樣,它有兩個必須實現的方法:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section//有多少個item-dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;//每一個長什么樣,它要使用dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:來生成

其他的兩個是分別有幾部分cell,和UITableView中的numberOfSection一樣.默認是1個,viewForSupplementaryElementOfKind這個則是用來做出表頭和表尾的。


UICollectionViewDelegate 它的代理方法全是可選的,常常且主要用到的就是:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

這是表明選中后要做什么.
以下來實現一下:
首先在自定義的頭文件里加入一個UIColletionView的屬性(比直接用實例變量好,具體請看Effective objective-c的學習筆記1)配置各種屬性,然后加到self.view上。

@property (nonatomic, strong) ZJCollectionViewFlowOut *collectionViewFlowLayout;
    self.collectionView = [[UICollectionView alloc]initWithFrame:self.view.frame collectionViewLayout:self.collectionViewFlowLayout];_collectionView.backgroundColor = [UIColor clearColor];_collectionView.dataSource = self;_collectionView.delegate = self;[self.view addSubview:_collectionView];

再設置viewController 遵守delegate和dataSource;

@interface ZJCollectionViewController ()<UICollectionViewDataSource, UICollectionViewDelegate>
@end

這樣再xcode 上新的一行輸入- collection就會出現非常多collectionView的提示了.
實現:collectionView:cellForItemAtIndexPath:
由于這種方法要用到前面說的那個注冊的cell所以先建一個UICollectionViewCell,順便搞定那個FlowLayout.
Cell的內容當然能夠自定義的了.
在viewDidLoad中創建CollectionView的以下加上:

    [_collectionView registerClass:[ZJCollectionViewCell class] forCellWithReuseIdentifier:kCellReuseIdentifier];
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{ZJCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCellReuseIdentifier forIndexPath:indexPath];NSString *image = @"201502192144014806.jpg";cell.userImageView.image = [UIImage imageNamed:image];return cell;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{return self.pictureArray.count;
}

在viewDidLoad中collectionView創建之前要創建那個布局的
collectionViewFlowLayout 對象.

    self.collectionViewFlowLayout = [[ZJCollectionViewFlowOut alloc]init];

當中在collectionViewFlowLayout里面是這種:

- (id)init
{if (self = [super init]) {self.minimumInteritemSpacing = 1.0;//item 之間的行的距離self.minimumLineSpacing = 0.0;//item 之間豎的距離self.itemSize = (CGSize){[UIScreen mainScreen].bounds.size.width/3,[UIScreen mainScreen].bounds.size.width/3};//        self.sectionInset = UIEdgeInsetsMake(4, 4, 4, 4); 這個是設置一個section的距離上下上左下右間距。

} return self; }

得出的結果例如以下圖:
這里寫圖片描寫敘述
這是一個簡單的UICollectionView的展示,時間不多。有空再具體點

轉載于:https://www.cnblogs.com/claireyuancy/p/7141333.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252350.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

70.文件異常

ferror檢測文件異常perror提示文件錯誤信息clearerr清除異常,讓文件指針回到開頭完整代碼 1 #define _CRT_SECURE_NO_WARNINGS2 #include<stdio.h>3 #include<stdlib.h>4 //perror提示文件錯誤信息5 //ferror檢測文件異常6 //clearerr清除異常,讓文件指針回到開頭…

ServiceNow 中關于UI Action 在portal端的使用

在 portal端是可以使用Form和UI Action的&#xff0c;例如&#xff1a;var data.f $sp.getForm()&#xff1b;//需要添加上相應參數在開箱組件Form的Server script中就有如下代碼&#xff1a;data.f $sp.getForm(data.table, data.sys_id, data.query, data.view);data.f對象中…

特殊密碼鎖

總時間限制: 1000ms內存限制: 1024kB描述有一種特殊的二進制密碼鎖&#xff0c;由n個相連的按鈕組成&#xff08;n<30&#xff09;&#xff0c;按鈕有凹/凸兩種狀態&#xff0c;用手按按鈕會改變其狀態。 然而讓人頭疼的是&#xff0c;當你按一個按鈕時&#xff0c;跟它相鄰…

系統安全題目(二)

1、在 php mysql apache 架構的web服務中輸入GET參數 index.php?a1&a2&a3 服務器端腳本 index.php 中$GET[a] 的值是&#xff1f;正確答案: C A 1B 2C 3D 1,2,3 2、以下哪些不是CSRF漏洞的防御方案&#xff1f;正確答案: D A 檢測HTTPrefererB 使用隨機tokenC 使用驗…

轉發和重定向的區別?

實際發生位置不同&#xff0c;地址欄不同 轉發是發生在服務器的 轉發是由服務器進行跳轉的&#xff0c;細心的朋友會發現&#xff0c;在轉發的時候&#xff0c;瀏覽器的地址欄是沒有發生變化的&#xff0c;在我訪問Servlet111的時候&#xff0c;即使跳轉到了Servlet222的頁面&a…

BZOJ3795 : 魏總刷DP

對于HARD&#xff1a; 需要滿足$ku[i]\times k\leq Tlate[i]$。 對于EASY&#xff1a; 需要滿足$ku[i]\times k\leq T-rest[i]$。 故對于HARD&#xff0c;設$a[i]-late[i]$&#xff0c;對于EASY&#xff0c;設$a[i]rest[i]$&#xff0c;并將所有題目的$u[i]$都$1$。 那么需要滿…

信息學競賽相關優秀文章合集[持續更新]

線段樹詳解 &#xff08;原理&#xff0c;實現與應用&#xff09;可持久化線段樹 簡介 運用伸展樹解決數列維護問題.pdfSplay 學習筆記&#xff08;一&#xff09;Splay 學習筆記&#xff08;二&#xff09;Splay 學習筆記&#xff08;三&#xff09; 請要相信我&#xff0c;30…

ceres-solver學習筆記

前一段時間總有一個想法&#xff0c;那就是&#xff0c;我只直到視覺slam是遠遠不夠的&#xff0c;激光slam仍然是一個比較穩妥的技術&#xff0c;好落地&#xff0c;應用廣泛&#xff0c;我想著&#xff0c;如果我學會了會大大增加自己的核心競爭力&#xff0c;所以我抽時間開…

幾款常見的視頻格式轉換器

在短視頻占半壁江山的時候&#xff0c;關于體積、格式等成了困擾人們的因素&#xff0c;視頻太大不利于傳播&#xff0c;比如微信里就限制了傳輸的大小不得超過20M&#xff0c;所以其實說起來工作上QQ的性能遠超微信。今天這里小編給大家總結幾款常用的視頻轉換器&#xff0c;希…

PHP Shell生成工具Weevely

PHP Shell生成工具WeevelyWeevely是一款模擬Telnet連接的PHP Shell工具。它不提供網頁形式的接口&#xff0c;而是提供一個命令形式的終端。滲透測試人員首先使用該工具生成對應的PHP網頁。然后&#xff0c;將該網頁上傳到目標Web服務器上。滲透人員就可以在終端連接該頁面&…

ceres學習之平面擬合

背景&#xff1a;orb-slam2最終保存的軌跡形成的平面是一個傾斜的&#xff0c;這個與相機初始化位置有關&#xff0c;但是有些時候&#xff0c;我們需要的是一個2d的軌跡的試圖&#xff0c;直接將軌跡向某一個平面投影的話。 得到的估計是失真的&#xff0c;所以我們需要對軌跡…

二維樹狀數組模板(區間修改+區間查詢)

二維樹狀數組模板(區間修改區間查詢) 例題&#xff1a;JOIOI上帝造題的七分鐘 一共兩種操作&#xff1a; \(L\ x_1\ y_1\ x_2\ y_2\ d\)&#xff1a;把\((x_1,y_1)\)&#xff0c;\((x_2,y_2)\)這個矩形內所有元素加\(d\)。\(k\ x_1\ y_1\ x_2\ y_2\)&#xff1a;查詢\((x_1,y_1…

egg(110,111,112)--egg之微信支付

微信支付前的準備工作 準備工作 準備工作&#xff1a;個體工商戶、企業、政府及事業單位。需要獲取內容 appid&#xff1a;應用 APPID&#xff08;必須配置&#xff0c;開戶郵件中可查看&#xff09;MCHID&#xff1a;微信支付商戶號&#xff08;必須配置&#xff0c;開戶郵件中…

解決圖片跨域問題

var imgs new Image(); imgs.crossOrigin "Anonymous"; //注意存放順序 imgs.src "http://192.168.0.107/ZHCX/CGZSIMG/1.jpg"; imgs.onload function () { var canvas document.createElement(canvas); canvas.width imgs.width; canvas.height i…

旋轉三維平面與某一坐標平面平行

在上一篇文章&#xff08;https://blog.csdn.net/weixin_38636815/article/details/109495227&#xff09;中我寫了如何使用ceres&#xff0c;根據一系列的點來擬合一個平面&#xff0c;很難保證ORB-SLAM輸出的軌跡嚴格與某一個坐標平面平行&#xff0c;所以這篇文章我我將說一…

elasticsearch的插件安裝

目前使用的是2.4.5版本的es 安裝的時候注意以下幾點 : 1.如果想所有的ip都能訪問es,需要修改config下的elasticsearch.yml.修改如下 network.host0.0.0.02.安裝查詢插件 : 進入es的安裝目錄,執行以下命令 ./bin/plugin install mobz/elasticsearch-head3.安裝刪除插件 目前不支…

let const緩存for循環的中間變量

es5中使用在for-in for循環中注冊異步事件&#xff0c;異步事件中的i總是最后一個值。使用es6的let const可以解決 let obj {a: 1,b: 1,c: 1 }// es5 for循環中 var聲明 i let funcs [] for (var key in obj) {funcs.push(() > {console.log(key)}) } funcs.forEach(func …

BZOJ1439 : YY的問題

考慮容斥&#xff0c;枚舉哪些不存在的邊選中了&#xff0c;剩下的不管&#xff0c;則可以用組合數計算方案數。 時間復雜度$O(m2^mnm)$。 #include<cstdio> const int N550,B10000,MAXL350; int n,m,S,i,j,e[N][2],g[N],f[N]; inline int max(int a,int b){return a>…

windows下配置opencv

我的windows下是使用的一個鏡像安裝的vs2015&#xff0c;然后在vs上編譯工程需要使用opencv時&#xff0c;需要在工程中配置opencv 新建一個C工程&#xff0c;按照下面的步驟進行配置。 設置opencv的環境變量 “此電腦”右鍵點擊“屬性”-->選擇“高級系統設置”-->選…

關于spring MVC中加載多個validator的方法。

首先講下什么叫做validator&#xff1a; validator是驗證器&#xff0c;可以驗證后臺接受的數據&#xff0c;對數據做校驗。 SpringMVC服務器驗證有兩種方式,一種是基于Validator接口,一種是使用Annotaion JSR-303標準的驗證。 1.使用Annotaion JSR-303標準的驗證 使用這個需要…