개인 프로젝트를 하면서 collectionCell을 selected했을 때 performSegue를 실행해주어야했는데 cell을 ViewController가 아니여서 바로 performSegue를 할 수 없었다. 그래서 방법을 고민하다 Delegate패턴을 이용했다.
protocol MainContainerQuestionDelegate{
func selectedCell(indexOf : Int)
}
이렇게 프로토콜을 만들어주고
extension MainContainerViewController : MainContainerQuestionDelegate{
func selectedCell(indexOf: Int) {
self.performSegue(withIdentifier: "segueForQuestionDetailViewController", sender: nil)
}
}
cell이 만들어지는 VC에서 만든 프로토콜을 채택해주는 작업을 하고
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MainContainerQuestionCollectionViewCell", for: indexPath) as? MainContainerQuestionCollectionViewCell else {
return UICollectionViewCell()
}
cell.delegate = self
return cell
class MainContainerQuestionCollectionViewCell: UICollectionViewCell{
func selectedCell(indexOf: Int) {
print("delegate Test")
self.delegate?.selectedCell(indexOf: indexOf)
}
var test : String?
var delegate:MainContainerQuestionDelegate?
}
VC에서 cell을 만들 때 Cell에 정의한 MainContainerQuestionDelegate타입의 변수 delegate를 VC로 지정해주면된다.
이렇게 mainVC에서 중간에 cell을 선택하면 아래와 같이 이동할 수 있게 된다.
요약
ㄱ. 가장 아래에 있는 cell 접근(performSegue 실행)?
ㄴ. 데이터 뿌려주기
위에 Result로 보여준 view의 구성
1번 = viewController
2번 = CollectionView
3번 = CollectionViewCell
4번 = CollectionView
-4번.Delegate = 3
-4번.DataSource = 3
5번 = CollectionViewCell