해당 뷰는 데이터의 배치가 자유롭기 때문에
많은 요소들을 보여줘야할때 사용하기 좋다.
dataSource : CollectionView의 컨텐츠들 관리,
cell을 어떻게 표현하고자 할 것인지에 대한 내용,
프로토콜 내부에 cell에 대한 표현 메소드를 정의할 수 있다.
(재사용 가능한 셀을 등록하는 것, 그것이 몇번째 인지 알려주는 것 등..)
delegate : 앱 개체의 대리자 (공식문서 표현),
셀에 대한 작업을 수행할 수 있는 메서드를 정의하며
cell의 행동에 대한 표현이라고 볼 수 있다.
( FlowLayout - {프로토콜} : 셀들을 어떻게 배치할 것인가)
CollectionView 내부에 생성한 커스텀 cell들에 대한 표현
아래 코드는 가상 주식 차트를 만들때
Cell의 ViewController을 따로 생성한뒤,
해당 Cell들에 대한 표현들을 정리해 본 것이다.
import UIKit
class StockRankCollectionViewCell: UICollectionViewCell {
// UI Components 연결
// UI Components 에 데이터를 업데이트 하는 코드 작성
@IBOutlet weak var rankLabel: UILabel!
@IBOutlet weak var companyIconImageView: UIImageView!
@IBOutlet weak var companyName: UILabel!
@IBOutlet weak var companyPriceLabel: UILabel!
@IBOutlet weak var diffLabel: UILabel!
func configure(_ stock: StockModel){
rankLabel.text = "\(stock.rank)"
companyIconImageView.image = UIImage(named: stock.imageName)
companyName.text = stock.name
companyPriceLabel.text = "\(convertToCurrencyFormat(price: stock.price)) 원"
if stock.diff > 0 {
diffLabel.textColor = UIColor.systemRed
}
else{
diffLabel.textColor = UIColor.systemBlue
}
diffLabel.text = "\(stock.diff)%"
}
func convertToCurrencyFormat(price: Int) -> String{
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 0
let result = numberFormatter.string(from: NSNumber(value: price))!
return result
}
}
참고 문서: https://www.zehye.kr/ios/2020/03/15/iOS_collectionView_datasource_delegate/
https://developer.apple.com/documentation/uikit/uitableview/1614955-datasource
https://developer.apple.com/documentation/uikit/uicollectionviewcell