iOS-UICollectionView的簡單使用(原創)

来源:http://www.cnblogs.com/start-ios/archive/2016/03/21/5301803.html
-Advertisement-
Play Games

UICollectionView是一種新的數據展示方式,簡單來說可以把他理解成多列的UITableView(請一定註意這是UICollectionView的最最簡單的形式)。如果你用過iBooks的話,可能你還對書架佈局有一定印象:一個虛擬書架上放著你下載和購買的各類圖書,整齊排列。其實這就是一個U


前言

UICollectionView是一種新的數據展示方式,簡單來說可以把他理解成多列的UITableView(請一定註意這是UICollectionView的最最簡單的形式)。如果你用過iBooks的話,可能你還對書架佈局有一定印象:一個虛擬書架上放著你下載和購買的各類圖書,整齊排列。其實這就是一個UICollectionView的表現形式,或者iPad的iOS6中的原生時鐘應用中的各個時鐘,也是UICollectionView的最簡單的一個佈局。

基礎知識

一.創建UICollectionView的常用方法

1.創建cell以及header,footer   

使用代碼創建  

  - registerClass:forCellWithReuseIdentifier:   - registerClass:forSupplementaryViewOfKind:withReuseIdentifier:    

  使用xib創建   - registerNib:forCellWithReuseIdentifier:   - registerNib:forSupplementaryViewOfKind:withReuseIdentifier:   

  復用cell   - dequeueReusableCellWithReuseIdentifier:forIndexPath:   - dequeueReusableSupplementaryViewOfKind:      :withReuseIdentifier:forIndexPath:           

2.獲取Collection View中的Item及位置   - indexPathForItemAtPoint:   - indexPathsForVisibleItems   - indexPathForCell:   - cellForItemAtIndexPath:

3.獲取Collection View的狀態   - numberOfSections   - numberOfItemsInSection:          

二:代理方法

1.UICollectionViewDelegate

1.處理選擇的Cells  

 - collectionView:shouldSelectItemAtIndexPath:

  - collectionView:didSelectItemAtIndexPath:  

 - collectionView:shouldDeselectItemAtIndexPath:

  - collectionView:didDeselectItemAtIndexPath:        

2.處理Cells的高亮   

- collectionView:shouldHighlightItemAtIndexPath:

  - collectionView:didHighlightItemAtIndexPath:   

- collectionView:didUnhighlightItemAtIndexPath:

2.UICollectionViewDataSource

1.獲取Section和Item的數量   

- collectionView:numberOfItemsInSection:  

 - numberOfSectionsInCollectionView:     

2.獲取Items的視圖  

 - collectionView:cellForItemAtIndexPath:  

 - collectionView:viewForSupplementaryElementOfKind:     atIndexPath:

關於學習UICollectionView我們可以和UITableView進行對比著學習 下麵我們來寫一個簡單的小例子 來具體使用一下這些方法 要實現的效果如下圖

1.初始化視圖佈局對象 導入代理 這裡要說的是UICollectionView 有三個代理方法  可以根據實際情況進行導入

<1>UICollectionViewDataSource 

<2>UICollectionViewDelegate 

<3>UICollectionViewDelegateFlowLayout

 

- (void)viewDidLoad {
    [super viewDidLoad];
    //初始化一個視圖佈局對象
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
    UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:self.view.frame collectionViewLayout:flowLayout];
    collectionView.backgroundColor = [UIColor whiteColor];
    collectionView.dataSource = self;
    collectionView.delegate = self;
    [self.view addSubview:collectionView];
    //註冊cell 必須要有
    [collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"UICollectionViewCell"];
}

2.實現具體的代理方法 以下代碼中有詳情註釋

//定義展示UICollectionViewCell的個數
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 20;
}
//定義展示section的個數
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 2;
}
//cell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellID = @"UICollectionViewCell";
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
    cell.backgroundColor = [UIColor orangeColor];
   
    return cell;
}
//定義每個item的大小
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    
    return CGSizeMake(50, 50);
}
//上左下右  每一組之間的間距
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
    //對組進行操作
    return UIEdgeInsetsMake(50, 50, 50, 50);
}
//UICollectionView被選中時調用的方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
    //臨時改變個顏色,看好,只是臨時改變的。如果要永久改變,可以先改數據源,然後在cellForItemAtIndexPath中控制。(和UITableView差不多吧!O(∩_∩)O~)
    cell.backgroundColor = [UIColor redColor];
    NSLog(@"item======%ld",(long)indexPath.item);
    NSLog(@"row=======%ld",indexPath.row);
    NSLog(@"section===%ld",indexPath.section);
}
//點擊cell 對上一個cell進行操作 // 取消選中操作
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath{
    
     UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
    cell.backgroundColor = [UIColor yellowColor];
    
}
//返回這個UICollectionView是否可以被選擇
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
// 設置最小行間距,也就是前一行與後一行的中間最小間隔
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    return 10;
}

// 設置最小列間距,也就是左行與右一行的中間最小間隔
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    return 10;
}
// 設置是否允許取消選中
- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s", __FUNCTION__);
    return YES;
}
// 由高亮轉成非高亮完成時的回調
- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s", __FUNCTION__);
}
// 高亮完成後回調
- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s", __FUNCTION__);
}
// 允許選中時,高亮
- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s", __FUNCTION__);
    return YES;
}

  

總結一下 這些代理方法 可以根據開發中的實際情況進行選擇  當然也有像UITableView那樣的自定義Cell 只需要繼承至UICollectionViewCell即可。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文章出自:聽雲博客 Reveal簡介: 這是個神奇的工具,它能常透徹地分析個App的UI結構。 這個工具包括兩部分,部分是在PC上運行的一個獨立應用,即Reveal.app,另一部分代碼在你要分析的某個App中,為此,Reveal提供了一個Framework和一個Dylib供使用。這兩部分之間通過B
  • shape 先看下,系統自帶的EditText和Button的外形 下麵看加了shape後的效果 簡單點講,shape可以為組件加上背景邊框,圓角之類的可以配合selector使用 shapeXXX.xml定義在drawable目錄下 EditText使用的 Button使用的定義的都 一樣 佈局中
  • java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx...}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from Curs
  • 如果想對自己自定義的類進行解檔和歸檔的話 必須遵循一個協議:NSCoding Student.h 文件 Student.m 文件 客戶端代碼 運行結果:
  • 此文章來自:聽雲博客 很多時候需要網路抓包分析,在iPhone上抓包稍有不同,下麵介紹三種常用的方式。分析工具以wireshark為例。 一、最簡單的方式:用PC作為熱點,在PC上抓包 優點:簡單 缺點:不能抓真機2g/3g/4g網路數據 步驟如下: 1、PC接上有線 2、PC用wifi方式共用網路
  • 載入使用AnimationUtils.load方法載入 一般都用代碼控制 如果需要 用XML控制可以在res\下建立 animator,即可, 在這個目錄建立XML文件如果 下方法導入
  • 先說一下為什麼要講框架的設計。 第一、IM應用一般是基於長連接的,也就是後臺一直在收發數據,那這裡就有一個後臺的概念; 第二、如果用戶是一個人群裡面的中心人物的話,那麼他的的數據量就會很大。頁面的顯示及資料庫的處理就需要關註了; 第三、分解app有利於我們降低耦合,在後期維護和升級時,稍微容易一點。
  • iOS證書突然失效 今早上班打包直接報錯,錯誤如圖 根據錯誤信息到“鑰匙串”裡面看了一下證書,證書都莫名其妙的失效了,昨天還是好好的。 重新去鑰匙串從證頒發中心獲取證書,然後登陸開發者賬號重新申請證書,然後添加到鑰匙串中,再次打包發現剛申請成功的證書還是無效的。折騰了半天才找到解決方案。 解決方法:
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...