호댕의 iOS 개발

[iOS] 코드로 화면전환하기 본문

Software Engineering/iOS

[iOS] 코드로 화면전환하기

호르댕댕댕 2021. 12. 12. 10:29

화면을 전환하려면 Storyboard에서 ctrl 키를 누르고 연결만 시켜주면 된다. 이후 Action segue를 원하는 방식으로 설정해주면된다. 

예를 들어 버튼을 눌렀을 때 다음 화면으로 넘어가고 싶다면 버튼에서 ctrl 키를 누른 상태로 넘어가고 싶은 화면에 드래그해주면 되는 것이다. 

 

하지만 스토리보드는 협업을 할 때 버전에 영향을 많이 받고, 동시에 하나의 스토리보드를 작업한다면 꼬여버리는 문제가 있다고 알고 있다. 

따라서 현업에선 각자 작업을 하는 스토리보드를 따로 두고 있다고 들었다. 

 

여기서 문제가 발생한다... 

스토리보드 파일을 따로 두면 기존에 segue를 직접 연결시켜주는 방식은 사용할 수 없는 것이다... 

 

그래서 이 땐 코드로 화면을 전환해줄 필요가 있다! 


이전에 버튼을 예로 들었으니 버튼으로 생각해보자. 

 

버튼을 눌렀을 때 이동을 해야하기 때문에 @IBAction을 만들어놓고 내부에 코드를 짜면 된다. 

 

 

일단 화면을 전환하기 위해선 코드로 전환될 화면의 스토리보드를 구성해줘야 한다. 

따라서 상수를 선언해주고, UIStoryboard를 선언해주면 된다.

let tableStoryboad = UIStoryboard(name: "SecondStoryboard", bundle: nil)

여기서 Storyboard의 이름은 스토리보드의 파일명과 동일하다. 

 

 

다음은 ViewController를 선언해주고 instantiateViewController 메서드를 활용해 이동할 스토리보드로 부터 특정한 View Controller를 생성해줘야 한다. 

let tableViewController = tableStoryboad.instantiateViewController(withIdentifier: "Table")

여기서 Identifier는 직접 선언을 해줘야 한다. 

이동하고 싶은 View를 그린 스토리보드로 가서 ViewController를 선택한 후 identity inspector로 간다. 

 

여기서 빨간 색으로 표시한 것처럼 Storyboard의 ID를 설정해주고 설정해준 값을 Identifier에 적어주면 된다. 

 

마지막으로 화면을 어떻게 전환할지 정해주면 된다. 

만약 Push로 화면 전환을 하고 싶다면 pushViewController(전환을 하고 싶은 ViewController, animated) 메서드를 활용해주면 된다. 

 

코드를 보면 다음과 같다. 

self.navigationController?.pushViewController(tableViewController, animated: true)

 

만약 modal로 창을 띄우고 싶다면 

self.present(<#T##viewControllerToPresent: UIViewController##UIViewController#>, animated: <#T##Bool#>, completion: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>)

요렇게 해주면 된다. 

 

 

 

전체 코드를 합쳐서 보면 다음과 같다. 

@IBAction private func touchUpDescriptionButton(_ sender: Any) {
    let tableStoryboad = UIStoryboard(name: "SecondStoryboard", bundle: nil)
    let tableViewController = tableStoryboad.instantiateViewController(withIdentifier: "Table")

    self.navigationController?.pushViewController(tableViewController, animated: true)
}
Comments