#2 Collection View |用照片牆過過出國的癮
Published in
8 min readOct 25, 2022
因為疫情關係已經好久沒有出國了,雖然最近出國旅遊解禁了,但尚未買好機票的我,就先用各國美麗的風景照片過過出國的癮吧!!!
學習目標
- Collection View Controller
- 新增自訂的Cocoa Touch Class & Swift File類別
- 自訂Struct型別
- 拉@IBOutlet & @IBAction
- @IBSegueAction 傳送資料
- Navigation Controller
StoryBoard架構
- 第一頁(Country)ViewCountroller:有五大洲的按鈕
- 第二頁(Travel)CollectionViewController:依據點選的按鈕,在第二頁顯示該洲的國家圖片
- 第三頁(BigPic)ViewCountroller:點選國家圖片後,在第三頁會顯示大張圖片
第一頁(Country) View Controller五大洲按鈕
- 新增Cocoa Touch Class檔案,自訂View Controller類別,並改好對應的Class
- 建立5個Button,設為Stack View並設定以下條件:
Axis: 以垂直排列
Alignment: Stack View以Fill填滿的方式對齊可設置的範圍
Distribution: 以Fill Equally的方式排列與設置尺寸,讓Stack View中的所有Button元件大小相等 - 拉Navigation Controller & 設定Navigation Bar樣式
第二頁(Country) Collection View Controller顯示照片牆
- 從UIKit中建立Collection View Controller (dataSource和delegate已連線)
- 新增Cocoa Touch Class與Swift File檔案,分別建立CollectionViewController與Collection View Cell類別,改好對應的Class,並設置Cell ID (名稱與Collection View Cell一樣)
- 在Collection View Cell中新增一個image view與label,Collection View的 Estimate Size 要設為 None,這裡不透過 auto layout 計算 cell 大小。
第三頁(BigPic) View Controller顯示大張圖片
- 新增Cocoa Touch Class檔案,自訂View Controller類別,並改好對應的Class
- 新增一個image view與label至view中,並設置constraints
在Assets中加入要顯示的圖片
程式撰寫
自訂型別(Travel)
第一頁 Country View Controller
- 五個按鈕拉@IBOutlet & @IBAction,並拉Segue到第二頁Collection View Controller,要記得幫Segue ID取名稱
- 從 segue 拉線產生@IBSegueAction,產生下個畫面的controller,將資
料存入下個畫面的屬性中
第二頁 Country Collection View Controller
- 刪除或註解以下兩段程式
第一段
//private let reuseIdentifier = "Cell"第二段
// self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
拉@IBOutlet 至Travel Collection View Cell
- 宣告陣列
- 各國圖片顯示於Cell中
- 拉segue到第三頁,並從 segue 拉線產生@IBSegueAction,可點選cell中的圖片,在第三頁顯示大張圖片與文字
第三頁 Big Pic View Controller
- 拉@IBOutlet與宣告儲存的圖片與文字
遇到的困難
- segue拉線的目標要注意是否跟程式碼一致,在第二頁傳送資料到第三頁時因為不一致,求救了Peter才得到解答😅
- IBSegueAction Function不熟悉,還需要多多多多練習!
GitHub
Reference