@IBAction func selectionValueChanged(_ sender: Any) {
print(CategorySelection.selectedSegmentIndex)
switch CategorySelection.selectedSegmentIndex {
case 1:
collectionsToDisplay = Menu.coldBrew
case 2:
collectionsToDisplay = Menu.frappucchino
case 3:
collectionsToDisplay = Menu.blended
default:
collectionsToDisplay = Menu.espresso
}
// MenuCollectionview에 들어가는 데이터를 다시 로드
MenuCollectionView.reloadData()
}
// CollectionViewCell에 할당할 데이터를 담는 배열 선언
lazy var collectionsToDisplay: [Menu] = Menu.espresso
이 코드는 전체 뷰를 제어하는 ViewController 클래스 안에 위치한 코드이다.
서로 다른 세그먼트를 선택할 때 마다 UISegmentedControl.selectedSegmentIndex
가 변하는 것을 이용하여, switch 구문으로 CollectionViewCell에 할당할 데이터를 담는 배열을 바꿔줄 수 있도록 했다.
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return collectionsToDisplay.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = MenuCollectionView.dequeueReusableCell(withReuseIdentifier: "menuCollectionViewCell", for: indexPath) as! MenuCollectionViewCell
cell.setCell(collectionsToDisplay[indexPath.row])
return cell
}
ViewController 안에 위치한 이 코드로 셀을 그려줄 수 있도록 했다. collectionView(_ collectionView:, cellForItemAt:)
함수 내부에 선언된 setCell(_ menu: Menu)
함수는 셀을 담당하는 클래스인 MenuCollectionViewCell
클래스 하위에 선언해줬다.
class MenuCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var menuImage: UIImageView!
@IBOutlet weak var menuName: UILabel!
var menu: Menu?
func setCell(_ _menu: Menu) {
menu = _menu
self.menuImage.image = UIImage(named: _menu.image)
self.menuName.text = _menu.name
}
}
위와 같은 UICollectionViewCell
객체 내부에 setCell
함수를 구현해서 셀을 잘 그려줄 수 있도록 했다.
Cell Size: width = 80, height = 110
로 설정이 되어있고, 아래에 Estimate Size가 None으로 설정되어 있는 것을 볼 수 있다.UICollectionViewDelegateFlowLayout
메소드로 설정하는 것과 같은 역할을 하는 것으로 보인다. 이 때 Estimate Size = None
으로 설정해주어여 해당 구문이 정상적으로 적용되는 것 같다.UISegmentedControl
을 사용해서 데이터를 보내주는 여러 예제를 보고 구현을 진행했는데, 성공적으로 구현이 된 것 같다.
과제를 제출한 후 피드백을 받고, 지금 이해한 부분이 제대로 된 것인지 체크한 다음에 작성하는 TIL에서 정확히 정리하도록 하겠다!