뷰컨의 인스턴스 생성 후 present 메서드로 생성한 뷰컨을 띄운다.
guard let aa = self.storyboard?.instantiateViewController(withIdentifier: "ProductDetailViewController") as? ProductDetailViewController else { return }
present(aa, animated: true, completion: nil)
present한 뷰컨을 다시 내리기 위해서는?
dismiss 메서드 사용
이때 주의할점은 presentingViewController로 현재 뷰컨을 띄운 뷰컨을 찾은다음에 그 뷰컨의 dismiss 메서드를 불러야지 그냥 self.dismiss() 하면 안된다.self.presentingViewController?.dismiss()
+화면전환 스타일도 정해줄 수 있다
aa.modalTransitionStyle = UIModalTransitionStyle.coverVertical
뷰컨의 인스턴스를 생성한 후 네비게이션 컨트롤러를 호출해서 뷰컨을 네비게이션 컨트롤러의 스택에 push한다.
*제일 하위에 류트뷰컨이 있고 그 위로 쌓이는 형식이다.
guard let aa = self.storyboard?.instantiateViewController(withIdentifier: "ProductDetailViewController") as? ProductDetailViewController else { return }
self.navigationController?.pushViewController(aa, animated: true)
네비게이션 컨트롤러에 push한 뷰컨을 다시 내리기 위해서는?
_ = self.navigationController?.popViewController(animated: true)
1st. 화면전환을 하고싶은 뷰컨끼리 연결하기 + 화면전환 방식 선택(ex. show)
2nd. 코드에서 세그웨이를 호출(performSegue)해줘야하므로 Attribute inspector창에서 identifier 설정하기
3rd. prepare 메서드를 오버라이드해서 화면이 전환될때 실행시키고 싶은 코드를 구현
*이때 파라미터의 segue를 활용하여 segue.destination으로 화면전환될 뷰컨을 가져올 수 있음
4th. 버튼이나 테이블뷰 셀을 클릭시 화면전환이 되게하려면 버튼의 액션메서드에 performSegue 실행
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) else { return }
performSegue(withIdentifier: "ShowProductDetail", sender: cell)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// 뷰컨 1
if let destination = segue.destination as? ProductDetailViewController {
if let senderCell = sender as? ProductListCell {
destination.productID = senderCell.productID
}
if let senderCell = sender as? ProductGridCell {
destination.productID = senderCell.productID
}
}
// 뷰컨 2
if let destination2 = segue.destination as? UINavigationController,
let aa = destination2.viewControllers.first as? AddProductViewController {
aa.addProductDelegate = self
}
}
-> 한 뷰컨에 두개의 segue가 연결되어있어도 타입캐스팅으로 각각 다른 segue의 destination 뷰컨을 불러올 수 있다.
스토리보드 상에서 버튼을 눌렀을때 뷰컨이 보여지도록 하고싶다면 버튼을 클릭하고 드래그하여 해당 뷰컨에 직접 연결하면된다.
unwind: segue 화면전환시 다시 돌아가는 방법
https://medium.com/@kyeahen/ios-unwind-segue-in-swift-e8ff0e7fbbcd
https://hyunable.github.io/2017/11/20/view-dataTrade/
https://infinitt.tistory.com/332