화면전환

jane·2022년 2월 6일
1

iOS

목록 보기
13/32
  1. 뷰컨트롤러 호출 : present/dismiss
  2. 네비게이션 컨트롤러 호출: pushViewController/popViewController
  3. segue: prepare
    1) 매뉴얼: 스토리보드에서 뷰컨끼리 연결 후 performSegue
    2) 액션: 스토리보드에서 버튼 등에 직접 연결

뷰컨트롤러 호출하여 present하기

뷰컨의 인스턴스 생성 후 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

네비게이션 컨트롤러 호출하여 pushViewController

뷰컨의 인스턴스를 생성한 후 네비게이션 컨트롤러를 호출해서 뷰컨을 네비게이션 컨트롤러의 스택에 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)

segue

매뉴얼: 스토리보드에서 뷰컨끼리 연결 후 performSegue로 화면전환 실행하는 방법

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

Reference

https://hyunable.github.io/2017/11/20/view-dataTrade/
https://infinitt.tistory.com/332

profile
제가 나중에 다시 보려고 기록합니다 ✏️

0개의 댓글