loadViewIfNeeded() : ViewController의 view가 아직 로드되지 않은 경우 로드하기

jane·2021년 11월 3일
0

iOS

목록 보기
6/32

뷰컨트롤러간 데이터를 전달하는 방법에 대해 공부하다가,
VC1에서 VC2로 화면전환을 하면서 데이터를 넘겨주고 싶었다.

loadViewIfNeeded()

//화면 전환하며 VC2의 changeStockLabel() 함수 실행하여 현재재고 라벨에 업데이트
func presentStockModifyView() {
        guard let stockModifyNC = storyboard?.instantiateViewController(withIdentifier: "StockModifyNavController") else { return }
        let stockModifyVC = stockModifyNC.children.first as? StockModifyViewController
        stockModifyVC?.loadViewIfNeeded()
        stockModifyVC?.changeStockLabel()
        present(stockModifyNC, animated: true, completion: nil)
    }

loadViewIfNeeded() 을 사용하기 전에는,
stockModifyVC?.changeStockLabel()으로 화면전환시 라벨이 바뀌기를 바랬는데,, VC2로 화면이 전환되어도 라벨이 안바뀌었다.

그래서 print(stockModifyVC?.isViewLoaded) 로 저 시점에서 VC2가 로드되었는지 확인해보니 false 가 나왔다. VC2의 뷰가 로드되기도 전에 VC2의 메서드를 사용하려 했으니,, 당연히 안되는거지,,

따라서, 뷰를 로드해주는 메서드 loadViewIfNeeded()를 사용하여 뷰를 먼저 로드한 후에 메서드를 실행해서 해결했다.

이런 상황이 발생한 이유는
ViewController의 View는 lazy하게 로드되어서이다.
storyboard를 이용해서 instantiateViewController로 뷰컨트롤러의 인스턴스를 만들어도 사용되지않으면 view가 로드되지않는다.

따라서 임의적으로 로드하고 나서 사용해야하는 것이다.

Reference

How To: Pass Data Between View Controllers in Swift
[iOS] loadViewIfNeeded 이거 왜 쓰는거에요?

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

0개의 댓글