[Xcode10 實際操作]三、檢視控制器-(12)在Storyboard中使用集合控制元件
本文將演示集合控制元件在故事板中的使用。
在控制器根檢視上點選滑鼠,以選擇該根檢視。
現在往根檢視中新增一個集合檢視。
點選【庫面板】圖示,開啟控制元件庫面板
在控制元件庫搜尋框內,輸入控制元件名稱Collection View,在控制元件庫中,快速定位目標控制元件。
然後在按鈕控制元件上雙擊,匯入所需的控制元件。
點選【庫面板】圖示,開啟控制元件庫面板。
接著將集合物件,移動到檢視控制器的適當位置。
在集合檢視定界框右下角處按下手指,並向下拖動,使集合檢視的尺寸和根檢視相同。
接著點選【尺寸檢查器】圖示,開啟尺寸檢查器面板,
Cell Size
【Width】:輸入集合檢視單元格寬度數值,
【Height】:輸入集合檢視單元格高度數值,
選擇集合檢視的單元格,點選【庫面板】圖示,開啟控制元件庫面板。
需要往集合檢視的單元格中,新增一個影象檢視。
在控制元件庫搜尋框內,輸入控制元件名稱Image View,在控制元件庫中,快速定位目標控制元件。
然後在按鈕控制元件上雙擊,匯入所需的控制元件。
【X】:影象檢視在單元格內的橫向座標值。
【Y】:影象檢視在單元格內的縱向座標值。
【Width】:影象檢視寬度數值,
【Height】:影象檢視高度數值,
開啟【屬性見哈起面板】
然後在【Tag】標誌值,輸入影象檢視的標誌值,
可以在程式碼中,通過標誌值,獲得影象檢視物件。
在故事板文件框架區,選擇集合檢視的單元格。
在【Identifier】識別符號輸入框中,輸入單元格的可重用識別符號。
在故事板文件框架區,選擇集合檢視。
在集合檢視控制元件上按下滑鼠右鍵,然後拖動到檢視控制器圖示,設定集合檢視的資料來源。
在彈出的列表中,選擇【dataSource】資料來源選項,設定集合檢視的資料來源,為當前的檢視控制器
在集合檢視控制元件上按下滑鼠右鍵,然後拖動到檢視控制器圖示,設定集合檢視的代理。
在彈出的列表中,選擇【delegate】代理選項,設定表格的代理。
點選【隱藏或顯示檢查器】按鈕,隱藏檢查器面板。
在專案導航區,開啟檢視控制器程式碼檔案【ViewController.swift】
1 import UIKit 2 //給根檢視控制器類,新增兩個代理協議 3 //一個使集合檢視的資料來源協議,一個使集合檢視的代理協議。 4 class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 5 6 var images :Array<String>! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11 12 //建立一個數組 13 //該數組裡面的資料,將作為集合資料的來源。 14 images = ["Pic1", "Pic2", "Pic3", "Pic4", "Pic5", "Pic6", "Pic7", "Pic8", "Pic9"] 15 } 16 17 //新增一個集合檢視代理方法,用來設定集合檢視的單元格數量。 18 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 19 //這裡使用陣列的長度,作為集合檢視的單元格數量 20 return images.count 21 } 22 23 //新增一個集合檢視代理方法,用來初始化和返回集合檢視的單元格,是最最重要的一個方法。 24 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 25 //建立一個字串,作為單元格的識別符號, 26 25 //也就是上文在故事板中,給單元格控制元件設定的那個重用識別符號。 27 let cellIdentifier = "reusedCell" 28 //單元格的識別符號,可以看作是一種重用機制,此方法可以從所有已經開闢記憶體的單元格里面, 29 28 //選擇一個具有同樣識別符號的、空閒的單元格。 30 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) 31 32 //通過在故事板中設定的標誌值,獲得單元格中的影象檢視控制元件。 33 let imageView = cell.viewWithTag(1) as! UIImageView 34 //設定影象檢視預設為半透明 35 imageView.layer.opacity = 0.5 36 //根據表格行的編號,從陣列中獲得對應的影象名稱 37 let imageName = images[(indexPath as NSIndexPath).row] 38 //將載入後的影象,指定給影象檢視 39 imageView.image = UIImage(named: imageName) 40 41 //最後返回設定好的單元格物件 42 return cell 43 } 44 45 //新增一個代理方法,用來處理單元格的點選事件 46 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 47 //根據單元格的編號,獲得被點選的單元格 48 let cell = collectionView.cellForItem(at: indexPath) 49 //通過在故事板中的標誌值,獲得單元格中的影象檢視 50 let view = cell?.viewWithTag(1) 51 //將影象檢視的透明度,設定為完全不透明。 52 view?.layer.opacity = 1.0 53 } 54 55 override func didReceiveMemoryWarning() { 56 super.didReceiveMemoryWarning() 57 // Dispose of any resources that can be recreated. 58 } 59 }