APPLE/Swift

[ Swift ] 화면 전환 구현 2

pandada 2022. 12. 6. 15:25
반응형

이전에 진행했던 내용에서 추가적으로 StoryBoard를 이용한 부분이 아닌 Code로 화면전환을 진행해보도록 하자.

이전글에서 만들어놨던 code로 Push 와 Present 버튼을 활용하여 화면전환에 대해서 진행해보도록 할 예정이다.

 

Code로 Push 버튼을 눌렀을 때 Code를 이용하여 네비게이션 스택에 새로운 화면이 표기되도록 구현해보자.

 

Code로 Push 화면 생성

이전과 마찬가지로 ViewController와 Label, Button 을 추가하여 새로운 ViewController를 생성하였다.

 

ViewController Class를 생성해주자.

 

< View Controller Class 생성 >

이름은 CodePushViewController로 새로 하나 생성을 하였다.

 

클래스 연결

이후 StoryBoard의 파일 인스펙터에서 추가한 ViewController의 클래스에 연결을 시켰다.

그리고 RootViewController를 선택하여 Assistant를 통해서 Code로 Push 버튼을 클릭하여 드래그앤 드랍을 통하여 Action함수를 생성해주자.

 

Action 함수 생성

필자의 경우에는 codePushBtn으로 이름을 정하여 Action 함수를 생성하였다. 위의 이미지에서는 Type이 Any로 되어있지만, 따라할 경우에는 Type을 UIButton으로 변경하여 넣어주자.

instaniateViewController를 통하여 서로 연결해주기 위해 변수 상수 viewController를 만들었고, 연결을 진행하였다.

 

identifier id를 StoryBoard의 ID로 넘겨주어야 하는 부분을 지정해줘야한다.

 

 

< Restoration ID 지정 및 연결 >

StoryBoard에서 이동할 ViewController를 선택하여 파일 인스펙터 창에서 Restoration ID를 필자의 경우에는 codePushViewController로 지정을 하였다.

그리고 다시 Code로 돌아와서 identifier ID에 Restoration ID를 넣어줬다.

이후에 해당 값은 옵셔널로 반환하기 때문에 Guard 문으로 처리까지 진행을 하였다.

이렇게 되면 instantiateViewController 메소드가 StoryBoard에서 View Controller에 정의한 ID로 해당하는 View Controller를 찾아서 인스턴스화를 해준다. 

 

navigation Controller 사용

이런식으로 코드를 작성하게 되면, 버튼을 누를 경우에 네비게이션 스택에 새로운 화면이 Push가 되게 된다.

실행을 할 경우에 버튼을 눌렀을 때에 새로운 화면으로 넘어가게 되고, 마찬가지로 네비게이션 바의 BackButton을 누를 경우에 RootViewController로 이동하게 된다.

 

또한 레프트엣지 스와이프 제스쳐를 통해서도 뒤로 갈 수 있지만, 해당 기능을 사용해서 넘어가는 것은 네비게이션 뷰 컨트롤러를 이용하여 화면을 푸쉬했을 때만 사용이 가능하다.

프리젠테이션 방법으로 화면이 전환된 경우에는 레프트엣지 스와이프 제스쳐를 사용하여 이전화면으로 돌아갈 수 없고, 돌아가게 하려면 해당 기능을 따로 구현해줘야한다.

 

결국 둘다 사용은 가능하지만 프리젠테이션으로는 따로 구현을 직접 해줘야한다는 차이점이 있다.

추가적으로 네비게이션 바의 Back 버튼이 아닌 추가한 Button으로 이전 화면으로 돌아가도록 해주는 기능을 추가해보도록 하자.

 

세그웨이 방법에서 호출했던 내용과 동일하게 팝뷰메소드를 호출시켜주면 된다.

 

popViewController

이전에 진행했던 내용과 동일하게 StoryBoard에서 Assistant를 선택하여 back버튼의 드래그앤드랍을 통해서 Action 함수를 추가하였다. 또한 네비게이션 컨트롤러를 사용하여 popViewController를 사용함으로써 RootViewContoller로 돌아갈 수 있도록 구현하였다.

 

그럼 마지막으로 Code로 Present 버튼을 클릭했을 때에 코드를 이용하여 루트뷰컨트롤러의 화면 위에 새로운 화면이 덮어질 수 있도록 구현을 해보도록 하자.

 

ViewController 생성 및 클래스 연결

codPresentViewcontroller의 클래스 파일을 만들어서 연결까지 진행을 하였다.

Code로 Present 버튼을 눌렀을 때에 새로운 화면이 Present 되는 코드를 작성해야하니 위에서 진행했던 것과 같이 동일하게 RootViewController의 버튼을 클릭하여 Action함수를 정의하도록 하자.

 

필자가 위에서 잘못 정의한 부분이 있어서 수정을 하도록 하겠다.

 

우선적으로 위에서 스토리보드의 아이디를 설정할 때에 스토리보드 아이디가 아닌 Restoration ID로 정의를 하였는데 해당 부분을 잘못 정의한 부분으로 ViewContoller의 상단 검은 네모박스를 클릭한 후에 파일인스펙터창에서 스토리보드의 ID를 제대로 정의해주자.

 

StoryBoard ID 연결

이렇게 필자의 경우에는 새로운 ViewController의 ID를 codePresentViewController로 정의를 하였고, 이후에 해당 아이디를 identifier에 입력하여 연결을 해주었다. 해당 부분까지는 Code로 Push 부분과 동일하다.

마찬가지로 해당 값 또한 옵셔널로 반환하기 때문에 guard문으로 추가 작업을 진행하면 된다.

 

 

present ViewController 사용

이렇게 코드를 작성하여 실행을 하게 되면 정상적으로 잘 작동하는 것을 확인할 수 있다.

위에서 진행했던 것과 동일하게 back 버튼의 기능 또한 활성화를 시켜 정상적으로 작동되도록 진행하였다.

좌측 이미지로까지만 코드를 작성하면 전체화면으로 표기가 되지 않는 부분을 우측사진과 동일하게 코드를 수정할 경우에 전체 화면으로 보이는 것 또한 확인을 할 수가 있다.

 

presentingViewController dismiss

push를 하지 않은 부분으로 인하여 이번에는 presentingViewController?.dismiss를 통하여 화면을 제거해주는 방식으로 진행을 하였다.

빌드를 해서 내용을 확인해보면 정상적으로 동작하는 것을 확인해 볼 수 있다.

이렇게 해서 IOS에서 전환할 수 있는 다양한 방법에 대해서 2번의 포스팅을 통하여 알아봤다. 필요에 맞게 원하는 내용으로 진행을 하면 될것 같다.

반응형

'APPLE > Swift' 카테고리의 다른 글

[ Swift ] ViewController Life Cycle  (0) 2023.01.26
[ Swift ] 화면 전환 구현 1  (0) 2022.11.25
[ Swift ] UINavigationController  (0) 2022.10.12
[ Swift ] 간단한 랜덤 속담 App  (0) 2022.10.05
[ Swift ] IBOulet & IBAction  (0) 2022.10.03