iOS 화면 전환

조민재
4 min readMar 29, 2017

--

특이하게 이 부분은 공부하더라도 iOS개발을 쉬면 백지화되더라구요. 저 스스로에게 개념을 다시 새기며 또 볼 일이 있을 것 같아서 이렇게 글을 씁니다.

iOS에서는 화면전환에는 크게 두가지로 나눌 수 있습니다. 하나는 소스 코드를 통해 전환하는 방식이고, 또 다른 하나는 스토리보드가 제공하는 기능을 이용하여 전환하는 방식입니다. 또 여기서 여러갈래도 나누어지게 됩니다.

전자의 방식을 ‘프로그래밍적으로 화면을 전환한다.’ 또는 ‘동적으로 화면을 전환한다’고 하고 후자의 방식을 ‘GUI 방식으로 화면을 전환한다.’ 또는 ‘정적으로 화면을 전환한다’고 합니다. 상황에 맞게 쉽게 쓰이기 때문에 섯불러 하나만 배우는 것보다 모두 배우는 것이 유리합니다.

iOS에서의 화면 전환 개념

  1. 뷰 컨트롤러의 뷰 위에 다른 뷰를 가져와 바꿔치기하기
  2. 뷰 컨트롤러에서 다른 뷰 컨트롤러를 호출하여 화면 전환하기
  3. 내비게이션 컨트롤러를 사용하여 화면 전환하기
  4. 화면 전환용 객체 세그웨이를 사용하여 화면 전환하기

1을 제외한 나머지 화면 전환은 모두 뷰 컨트롤러를 호출하는 방식으로 이루어집니다. 전환할 화면 담당 뷰 컨트롤러의 인스턴스를 생성하고, 이를 불러들여서 기존의 화면위에 덮어 화면이 전환되는 것이죠. 절대! 기존의 화면을 버리는 것이 아닙니다.

iOS에서 화면 전환은 ‘다음 화면으로 이동하는 방법과 이전 화면으로 되돌아가는 방법이 다름' 과 ‘화면 전환 방식에 따라 이전 화면으로 되돌아가는 방법이 다름’ 이렇게 두가지 특성을 가지고 있습니다.

화면 전환 개념 1번에 대해 이야기를 안했는데 이 방식은 대단히 위험한 방식입니다. 기존의 필요없는 뷰를 제거해주지 않고 뷰 위에 다른 뷰를 가져와 바꿔치기를 한다면, 메모리가 터져서 앱이 죽어버리고 말겠죠.

화면 전환 개념 2번- 뷰 컨트롤러 직접 호출에 의한 화면 전환

UIViewController에 정의된 present메소드를 사용하면 쉽게 해결됩니다. present메소드를 이용하면 기존 뷰 컨트롤러위에 새로운 뷰 컨트롤러를 덮어 씌워 참조하는 관계가 형성 됩니다.

먼저 ViewController에 다음view로 넘어가는 버튼을 IBAction으로 연결합니다. 이후 밑의 코드 처럼 액션 안에 넣어주면 됩니다.

let ViewController인스턴스 = self.storyboard?.instantiateViewController(withIdentifier: “Storyboard ID값”)

ViewController인스턴스?.modalTransitionStyle = UIModalTransitionStyle.coverVertical

self.present(ViewController인스턴스!, animated: true, completion: nil)

이런식으로 한다면 버튼을 누를 경우, 지정된 뷰로 이동하게 됩니다.

화면 전환 개념 3번- 내비게이션 컨트롤러를 사용하여 화면 전환하기

내비게이션 컨트롤러는 2번과 크게 차이가 있지 않습니다.

이렇게 네비게이션 컨트롤러를 연결시킨 후, 버튼에 네비게이션 연결하고 코드를 작성해주시면 됩니다.

let ViewController인스턴스 = self.storyboard?.instantiateViewController(withIdentifier: “Storyboard ID값”)

self.navigationController?.pushViewController(ViewController인스턴스!, animated: true)

그리고 빌드를 시켜주면, 자연스럽게 버튼을 누를 경우, 네비게이션이 연결된 뷰가 뜰 것입니다.

--

--