본문은 야곰 아카데미 커리어 스타터 캠프를 통해 학습한 내용을 회고한 글입니다.
instantiateViewController(identifier:creator:)
데이터 전송을 하기 위해 원래 작성했던 코드는 다음과 같다:
두 번째 뷰컨
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let abc = exhibitItems[indexPath.row]
let exhibitItemView: ExhibitItemViewController = ExhibitItemViewController.init(navigationTitle:
abc.name, descriptionText: abc.description, imageName: abc.imageName)
navigationController?.pushViewController(exhibitItemView, animated: true)
tableView.deselectRow(at: indexPath, animated: true)
}
세 번째 뷰컨
import UIKit
final class ExhibitItemViewController: UIViewController {
@IBOutlet private weak var imageView: UIImageView?
@IBOutlet private weak var descriptionLabel: UILabel?
override func viewDidLoad() {
super.viewDidLoad()
}
init(navigationTitle: String, descriptionText: String, imageName: String) {
super.init(nibName: "ExhibitItemView.nib", bundle: nil)
self.imageView?.image = UIImage(named: imageName)
self.descriptionLabel?.text = descriptionText
navigationItem.title = navigationTitle
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
그런데, 이렇게 코드를 짜게 되면 다음과 같은 에러가 뜬다.
최종적으로 데이터를 넘겨주기 위해 사용한 코드는 다음과 같다:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let itemDetailView: ItemDetailViewController = storyboard?.instantiateViewController(identifier:
ItemDetailViewController.identifier, creator: { creator in
let item = self.exhibitItems[indexPath.row]
let itemDetailViewController = ItemDetailViewController(item: item, coder: creator)
return itemDetailViewController
}) {
navigationController?.pushViewController(itemDetailView, animated: true)
}
tableView.deselectRow(at: indexPath, animated: true)
}
그래서 오늘은 instantiateViewController(identifier:creator:)를 공부해봤다.
참조
https://developer.apple.com/documentation/uikit/uistoryboard/3213989-instantiateviewcontroller
instantiateViewController(identifier:creator:) | Apple Developer Documentation
Creates the specified view controller from the storyboard and initializes it using your custom initialization code.
developer.apple.com
'YAGOM CAREER STARTER' 카테고리의 다른 글
[TIL] 20230302: 함수배치순서, format specifier (0) | 2023.03.03 |
---|---|
[TIL] 20230228: Convention, weak-strong (0) | 2023.03.01 |
[토요스터디A반] 20230225: TableView (0) | 2023.02.27 |
[TIL] 20230224: Initializer (0) | 2023.02.24 |
[TIL] 20230223: TableView 코드로 구현하기 (0) | 2023.02.24 |