Delegate로 특정 Cell을 클릭했을 때 상세 정보 페이지로 이동하도록 구현했다.
extension ViewController : UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let viewController = self.storyboard?.instantiateViewController(identifier: "DiaryDetailViewController") as? DiaryDetailViewController else { return }
let diary = self.diaryList[indexPath.row]
viewController.diary = diary
viewController.indexPath = indexPath
self.navigationController?.pushViewController(viewController, animated: false)
}
}
상세 정보 페이지인 DiaryDetailViewController에서는 전달받은 diary 객체를 가지고 View를 초기화한다.
//
// DiartyDetailViewController.swift
// Basic_05
//
// Created by 고도 on 2022/09/06.
//
import UIKit
class DiaryDetailViewController: UIViewController {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var contentsTextView : UITextView!
@IBOutlet weak var dateLabel: UILabel!
var diary : Diary?
var indexPath : IndexPath?
override func viewDidLoad() {
super.viewDidLoad()
self.configureView()
}
private func configureView() {
guard let diary = self.diary else { return }
self.titleLabel.text = diary.title
self.contentsTextView.text = diary.contents
self.dateLabel.text = self.dateToString(date: diary.date)
}
private func dateToString(date : Date) -> String {
let formatter = DateFormatter()
formatter.dateFormat = "yy년 MM월 dd일(EEEEE)"
formatter.locale = Locale(identifier: "ko_KR")
return formatter.string(from: date)
}
}
이후 빌드를 진행했는데 Cell을 클릭하면 아래와 같은 오류가 발생하며 앱이 중지됐다.
Exception NSException * "-[UIView setText:]: unrecognized selector sent to instance 0x13110b480" 0x0000000283b5d920
Outlet변수와 View가 제대로 연결되어 있지 않다는 생각에 스토리보드를 살펴봤다. Outlet변수에 마우스를 갖다놓으면 스토리보드 상에서 연결된 View에 대한 정보를 확인할 수 있는데 titleLabel은 UILabel이 아닌 UIView와 연결되어 있는 것을 발견할 수 있었다.
titleLabel의 기존 연결을 제거하고정상적으로 연결해주었다.