iOS/UIKit

[IOS]스토리보드 NavigationController 화면 전환

유훈 | Yuhun 2022. 1. 30. 20:53
반응형

 

 

먼저 NavigationController 요소를 추가하고 Root는 사용하면 두고 아니라면 지워줍니다.

이후 Navigation Controller를 root로 준비한(아니면 사용할) ViewController에 우클릭 드래그로 연결해주고

NavigationController 속성에서  is initial view controller 를 체크해 줍니다.

(속성 메뉴에서 is initial view controller 체크된 viewController가 앱 실행시 처음 화면이 된다.)

이제 준비가 되었으니 화면을 전환하는 방법을 알아보겠습니다.


sugue로 push 또는 Present 하기

1. 스토리보드에서 ViewController를 추가

2. 동작을 수행할 클래스 생성

newFile -> cocoa Touch Class(UIViewController 선택)

3. 파란 부분을 눌러 class를 2번에서 만든 클래스로 지정

4. 원래 화면 버튼 -> 바뀔 화면 으로 우클릭 드래그

5. Show 선택(Present를 사용할 시 presentModally 선택)

 

 

원래 화면으로 돌아가는 방법

assistant(단축키: ctrl+opt+cmd+enter) 켜서 동작 지정

 

Push 일 때 돌아가기

1. 네비게이션의 Back 버튼 누르기

2. 왼쪽 스와이프

3. 버튼에 IBAction 할당

// animated는 애니메이션 여부

self.navigationController?.popViewController(animated: true) // 이전 화면으로 이동

self.navigationController?.popToRootViewController(animated: true) // 네비게이션의 첫번째 스택이 root로 이동

 

Present 일 때 돌아가기

(참고 - fullScreen 설정은 스토리보드 연결 Segue화살표를 클릭해 presentation 변경)

1. 위에서 아래로 쓸기 (FullScreen일 때는 불가)

2. 버튼에 IBAction 할당

 self.presentingViewController?.dismiss(animated: true, completion: nil)
 // completion은 동작 완료 후 실행할 클로저

Code로 push 또는 Present 하기

스토리보드에서 직접적으로 연결하는 것이 아닌 코드에 Action을 추가해push와 present를 해 보도록 하겠습니다.

 

먼저 스토리보드에서 이동할 viewController의 ID를 지정해 주어야 합니다.

원하는 viewController를 선택후 identify의 StoruBoard ID를 원하는 대로 정해줍니다.

이제 이 ID를 이용해 코드로 viewController에 접근해 보겠습니다.

 

Push

1. 해당 push 할 요소를 IBAction으로 연결

2. 버튼에 IBAction 할당

@IBAction func 액션버튼이름(_ sender: UIButton) {
        // 스토리보드에서 이름 붙이고 이름을 가져옴
        guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "스토리보드 아이디") else{return}
        
        // 가져온 ViewController로 Push
        self.navigationController?.pushViewController(viewController, animated: true)
    }

 

Present

push와 기본적으로 같지만 코드가 조금 다릅니다.

1. 해당 push 할 요소를 IBAction으로 연결

2. 버튼에 IBAction 할당

@IBAction func 액션이름(_ sender: UIButton) {
        // 스토리보드에서 이름 붙이고 이름을 가져옴
        guard let viewController = self.storyboard?.instantiateViewController(withIdentifier: "스토리보드 아이디") else{return}
        
        // 전체 화면으로
        // 아래 코드가 없으면 modal(기본값)으로 설정
        viewController.modalPresentationStyle = .fullScreen
       
        // present 시키기
        self.present(viewController, animated: true, completion: nil)
    }

 

원래 화면으로 돌아가는 방법은 위의 방법과 같습니다.

반응형