class DetailViewController: UIViewController {
@IBOutlet var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
}
IBOutlet
: Xcode에게 이 코드라인과 인터페이스 빌드 사이에 연결이 있다는 것을 알려준다.
var imageView: UIImageView!
: 프로퍼티가 UIImageView 유형임을 선언한다. 강제 옵셔널 언래핑 "!" 은 UIImageVIew가 존재할 수도 존재하지 않을 수도 있지만 우리가 사용하려는 시점에는 존재한다고 확신한다는 의미이다.
DetailViewController가 처음 생성되었을 때는 UIImageView는 만들어지지 않았기 떄문에 존재하지 않지만 이를 위한 메모리 공간은 필요하다. 이때 imageView 프로퍼티는 nil 이거나 빈 메모리 공간이다. 하지만 뷰가 로드되고 outlet이 연결되면서 UIImageView은 nil이 아닌 실제 UIImageView를 가리키므로 이제 이것을 사용할 수 있다.
즉, nil로 시작하지만 우리가 사용하기 이전에 값이 설정되기 때문에 우리가 사용하려고 할 때에는 절대 nil이 아니라는 것을 확신할 수 있다.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(identifier: "Detail") as? DetailViewController {
vc.selectedImage = pictures[indexPath.row]
navigationController?.pushViewController(vc, animated: true)
}
}
if let imageToLoad = selectedImage {
imageView.image = UIImage(named: imageToLoad)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.hidesBarsOnTap = true
}
override func viewDidLoad() {
super.viewDidLoad()
title = "Storm Viewer"
navigationController?.navigationBar.prefersLargeTitles = true
}
override func viewDidLoad() {
super.viewDidLoad()
title = selectedImage
navigationItem.largeTitleDisplayMode = .never
}
title = selectedImage
: view controller가 storyboard, navigationController 프로퍼티를 가지는 것처럼 title 프로퍼티도 가진다. 이것은 navigationController에 의해 자동으로 읽히고 상단의 네비게이션 바에 표시된다.
navigationItem.LargeTitleDisplayMode = .never
: 해당 뷰 컨트롤러에서는 제목이 작게 보이길 바랄 때 사용한다.